• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用__import __()以自动防故障的方式重新导入相同的python模块

python 来源:LGB 6次浏览

我使用__import__来导入python模块。不过,我想实现一个解决方案来重新导入一个可能同时发生变化的模块(开发/调试目的)。如果我尝试这个,我仍然会得到“旧”模块,我猜是因为它已经被导入。我是否可以强制python以相同的.py文件名重新导入新版本的模块?我无法在重新导入之前删除旧模块(这将有助于我猜),因为我想要某种防错行为:如果(重新)导入失败,我想继续使用旧模块。使用__import __()以自动防故障的方式重新导入相同的python模块

像这样的东西更多或更少的伪代码:

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,但是您确实希望防止重新导入失败。我建议从IPython自动重载扩展(source)看看superreload

这应该处理错误在重装:

old_dict = module.__dict__.copy() 
try: 
    module = reload(module) 
except: 
    module.__dict__.update(old_dict) 
    raise 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)