从字符串importlib.reload模块?

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。

如果提供了无效的字符串或未加载的模块,则可能会更好,例如"........"引发异常。

spi*_*kus 5

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)


iBu*_*Bug 5

根据@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)