33

我无法使用该eval()功能导入模块。

所以,我有一个功能,如果我这样做的import vfs_tests as v话。但是,使用eval()like的相同导入eval('import vfs_tests as v')会引发语法错误。

为什么会这样?

4

3 回答 3

64

使用exec

exec 'import vfs_tests as v'

eval仅适用于表达式,import是一个语句。

exec是 Python 3 中的一个函数: exec('import vfs_tests as v')

要使用字符串导入模块,您应该使用 importlib模块:

import importlib
mod = importlib.import_module('vfs_tests')

在 Python 2.6 及更早版本中使用__import__.

于 2013-06-16T19:14:59.790 回答
11

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:

enter image description here

于 2020-10-24T08:28:18.077 回答
4

如果您想将所有代码作为字符串传递给 eval 函数,我的小技巧:

>>> eval('exec("import uuid") or str(uuid.uuid4())')
'bc4b921a-98da-447d-be91-8fc1cebc2f90'
>>> eval('exec("import math") or math.sqrt(2)')
1.4142135623730951
于 2021-01-15T15:30:34.510 回答