我正在使用__import__
导入 python 模块。但是,我想实施一个解决方案来重新导入可能同时更改的模块(开发/调试目的)。如果我尝试这个,我仍然会得到“旧”模块,我猜是因为它已经被导入了。我可以强制 python 从相同的 .py 文件名重新导入新版本的模块吗?我无法在重新导入之前删除旧模块(我猜这会有所帮助),因为我想要某种防错行为:如果(重新)导入失败,我想继续使用旧模块。
类似这样的或多或少的伪代码:
mod = None
reload_trigger = True
MODULE_NAME = "mymodule.py"
while True:
if reload_trigger:
reload_trigger = False
try:
mod_new = __import__(MODULE_NAME)
except ImportError as a:
if mod is None:
raise RuntimeError("Initial module import failed, cannot continue!")
print("Import problem, still using the old module: " + str(a))
continue
mod = mod_new
del mod_new
mod.main_loop_iterate_etc() # it may also set reload_trigger to True
Afaik reload() 可用于重新导入模块,但我不确定如果重新导入失败如何处理这种情况,所以我仍然可以使用旧模块代替。使用异常处理程序“保护” reload() 以捕获导入问题等是否足够?
另外,我是否应该手动处理这种情况以重新加载我重新导入的模块导入的所有模块?因为我希望它们被重新加载以及“依赖”。
谢谢!