I can't import a module using the eval()
function.
So, I have a function where if I do import vfs_tests as v
it works. However, the same import using eval()
like eval('import vfs_tests as v')
throws a syntax error.
Why is this so?
I can't import a module using the eval()
function.
So, I have a function where if I do import vfs_tests as v
it works. However, the same import using eval()
like eval('import vfs_tests as v')
throws a syntax error.
Why is this so?
Use exec
:
exec 'import vfs_tests as v'
eval
works only on expressions, import
is a statement.
exec
is a function in Python 3 : exec('import vfs_tests as v')
To import a module using a string you should use importlib
module:
import importlib
mod = importlib.import_module('vfs_tests')
In Python 2.6 and earlier use __import__
.
Actually. if you absolutely need to import using eval
(for example, code injection), you can do it as follow in Python 3, since exec
is a function:
eval("exec('import whatever_you_want')")
For example:
>>> eval('exec("from math import *")')
>>> sqrt(2)
1.4142135623730951
My little trick if you want to pass all the code as string to eval function:
>>> eval('exec("import uuid") or str(uuid.uuid4())')
'bc4b921a-98da-447d-be91-8fc1cebc2f90'
>>> eval('exec("import math") or math.sqrt(2)')
1.4142135623730951
You can use __import__
inside of eval
to import something.
eval("__import__('os').system('ls')")
© 2022 - 2024 — McMap. All rights reserved.