iBu*_*Bug 4 python-3.x python-importlib
我想用来importlib重新加载其名称是动态生成的模块。
例:
import sys
def some_func():
return "sys"
want_reload = some_func()
Run Code Online (Sandbox Code Playgroud)
现在如何sys使用变量重新加载模块want_reload?我不能直接提供给它,importlib.reload()因为它说它需要一个模块,而不是str。
如果提供了无效的字符串或未加载的模块,则可能会更好,例如"........"引发异常。
importlib.import_module() 不会重新加载,但是即使已加载也返回对模块的引用:
import sys
import importlib
def some_func():
return "sys"
want_reload = some_func()
want_reload_module = importlib.import_module(want_reload)
importlib.reload(want_reload_module)
Run Code Online (Sandbox Code Playgroud)
根据@spinkus的回答,我想出了这个解决方案:
由于我不想加载尚未加载的模块,因此我可以从中获取引用sys.modules
want_reload = some_func()
try:
want_reload_module = sys.modules[want_reload]
importlib.reload(want_reload_module)
except KeyError:
raise ImportError("Module {} not loaded. Can't reload".format(want_reload))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |