eval导入模块

Sid*_*rth 19 python eval

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

所以,我有一个功能,如果我这样做的import vfs_tests as v话.然而,使用相同的导入eval()eval('import vfs_tests as v')抛出一个语法错误.

为什么会这样?

Ash*_*ary 41

用途exec:

exec 'import vfs_tests as v'
Run Code Online (Sandbox Code Playgroud)

eval仅适用于表达式,import是一种陈述.

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

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

import importlib
mod = importlib.import_module('vfs_tests')
Run Code Online (Sandbox Code Playgroud)

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

  • 一句警告:exec非常强大.如果你执行的字符串的一部分来自不受信任的来源,那么exec也是非常危险的. (4认同)

Edm*_*ang 9

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

>>> eval('exec("import uuid") or str(uuid.uuid4())')
'bc4b921a-98da-447d-be91-8fc1cebc2f90'
>>> eval('exec("import math") or math.sqrt(2)')
1.4142135623730951
Run Code Online (Sandbox Code Playgroud)


Fre*_*ric 6

实际上。如果您绝对需要使用导入eval(例如代码注入),您可以在 Python 3 中执行以下操作,因为它exec是一个函数:

eval("exec('import whatever_you_want')")
Run Code Online (Sandbox Code Playgroud)

例如:

在此处输入图片说明