首页 > 解决方案 > 如果由函数导入,则使用 `exec` 导入的模块不可用

问题描述

exec在 Python 3 中,当我在全局范围内使用导入模块时,它可以工作。但是当我在函数中执行此操作时,即使我没有收到导入错误,Python 也无法识别模块名称。

导入使用 sys成功,在全局范围内:

>>> sys.argv
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
>>> exec('import sys')
>>> sys.argv
['']

没有导入错误,但无法使用os从函数导入的内容:

>>> def import_os():
...   exec('import os')
...   os.listdir('.')
...
>>> import_os()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in import_os
NameError: name 'os' is not defined
>>>

知道如何在函数内完成这项工作吗?

标签: pythonpython-import

解决方案


推荐阅读