我正在尝试处理包foo
执行子包foo.bar
的相对导入的情况,但在foo
的初始化完成之前自己引发异常。在这种情况下,foo
未导入,因此reload(foo)
将无效。但import foo
在相对导入行ImportError: cannot import name 'bar'
上失败。
如果这只是包中的一个错误,显然我可以退出我的解释器,修复错误,继续前进。但是我正在使用这种情况,问题可能是由于用户环境中的问题,并且他们可以修复它并希望在不重新启动解释器的情况下重新加载(假设他们正在交互式会话中工作。)
Contrived example,random()只是为了提供一些尝试重新加载/重新导入的理由:
#foo/__init__.py
from . import bar
bar.init()
#foo/bar.py
import random
import time
def init():
random.seed(time.time())
if random.random() >= 0.5:
raise ValueError
我提出的唯一解决方法是捕获异常(允许导入成功)并使用某种代理对象来管理未初始化的案例。