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?