相对导入和初始化异常

时间:2015-08-06 19:30:48

标签: python

我正在尝试处理包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

我提出的唯一解决方法是捕获异常(允许导入成功)并使用某种代理对象来管理未初始化的案例。

0 个答案:

没有答案