Python 通过 exec 导入无效,而硬编码导入有效
Python import via exec does not work, while hardcoded import works
在函数内部,我必须动态地从模块导入变量 (dict):
exec("from ctrl_%s import default_settings" % get_version_id(iid))
这是行不通的。稍后引用此变量时,它表示:UnboundLocalError: local variable 'default_settings' referenced before assignment
该变量在要导入的模块的全局范围内。
但是:
如果我在没有 exec() 的情况下硬编码此语句,这一切都有效。字符串格式正确,我可以打印出来。
有人知道该怎么做吗?
首先,我非常不鼓励使用 exec
,它通常不能满足您的要求,尤其是在涉及某些特殊语法的情况下。
不过还好有小技巧:
例如您可以导入模块并使用 dict 或 getattr:
import math
getattr(math,"sin")
math.__dict__['sin']
编辑刚刚检查了我的回答,我看到你想导入一个模块......
但是也有一个技巧:
https://docs.python.org/3/library/functions.html#__import__
另请查看此问题以获取一些示例:
How to import a module given its name as string?
在函数内部,我必须动态地从模块导入变量 (dict):
exec("from ctrl_%s import default_settings" % get_version_id(iid))
这是行不通的。稍后引用此变量时,它表示:UnboundLocalError: local variable 'default_settings' referenced before assignment
该变量在要导入的模块的全局范围内。
但是:
如果我在没有 exec() 的情况下硬编码此语句,这一切都有效。字符串格式正确,我可以打印出来。
有人知道该怎么做吗?
首先,我非常不鼓励使用 exec
,它通常不能满足您的要求,尤其是在涉及某些特殊语法的情况下。
不过还好有小技巧:
例如您可以导入模块并使用 dict 或 getattr:
import math
getattr(math,"sin")
math.__dict__['sin']
编辑刚刚检查了我的回答,我看到你想导入一个模块...... 但是也有一个技巧:
https://docs.python.org/3/library/functions.html#__import__
另请查看此问题以获取一些示例: How to import a module given its name as string?