我想用来importlib
重新加载一个名称是动态生成的模块。
例子:
import sys
def some_func():
return "sys"
want_reload = some_func()
现在如何sys
使用变量重新加载模块want_reload
?我不能直接提供它,importlib.reload()
因为它说它需要一个模块,而不是 str。
如果提供无效字符串或未加载的模块会更好,例如"........"
,它会引发异常。
我想用来importlib
重新加载一个名称是动态生成的模块。
例子:
import sys
def some_func():
return "sys"
want_reload = some_func()
现在如何sys
使用变量重新加载模块want_reload
?我不能直接提供它,importlib.reload()
因为它说它需要一个模块,而不是 str。
如果提供无效字符串或未加载的模块会更好,例如"........"
,它会引发异常。
importlib.import_module()
不会重新加载,但即使已经加载,也会向模块返回一个 ref:
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)
@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))