在包内和包用户中捕获自定义python异常

时间:2018-01-16 07:48:54

标签: python python-2.7 exception custom-exceptions

我正在使用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'>

如何以优雅的方式解决此问题?

0 个答案:

没有答案