我正在使用python开发一个多级包:
/mega_package
__init__.py
a.py
/medium_package
__init__.py
/internal_package
__init__.py
exceptions.py
在exceptions.py
模块中,我有一个自定义异常:
class VeryBadException(Exception):
pass
我通过以下方式从mega包中的模块a.py
导入此异常:
from medium_package.internal_package import VeryBadException
我可以在大型软件包的上下文中运行主脚本时捕获它。
当我将mega_package
作为插件导入外部模块时,我必须通过以下方式导入此异常:
from mega_package.medium_package.internal_package import VeryBadException
我的问题是,如果mega_package
中的某个模块提升VeryBadException
,我无法抓住它。
我的代码看起来像这样:
import mega_package
try:
mega_package.a.do_bad_thing()
except VeryBadException:
print 'Got it!!!'
except Exception,e:
print type(e)
print type(VeryBadException())
,输出
<class 'medium_package.internal_package.exceptions.VeryBadExcpetion'>
<class 'mega_package.medium_package.internal_package.exceptions.VeryBadExcpetion'>
如何以优雅的方式解决此问题?