检测异常类型

时间:2017-07-25 23:34:49

标签: python python-3.x

我根据问题和用户的自定义消息定义了一组异常。

我想开发一种使用这些自定义异常的错误处理机制,让它们冒泡到更高级别的日志记录类,最终到达用户,以便我们可以提供反馈并告诉他们要修复的内容。它甚至可能是后端系统出现故障,所以他们会知道稍后再回来。

但是,如果它不是手动创建的异常之一,并且它是系统异常(这些异常被引发,但包含在自定义异常中),我想返回一般错误。

当我处理我的异常时,有什么好方法可以检测它是我的一个还是我没有考虑的东西?

我正在考虑将基于自定义属性的基础下的所有异常子类化,并在让异常冒泡时检查它,但它似乎有点hacky。

由于

1 个答案:

答案 0 :(得分:4)

您可以从单一类型派生所有异常。许多主要的Python库都是这样做的。

现在,看看我是如何从共享基类派生B的?

class A(Exception):
    pass

class B(A):
    pass

让我们看看它是否有效:

>>> try:
>>>     raise B
>>> except A:
>>>     print("Caught")
>>>     
Caught

而且它没有发现无关的例外情况?

>>> try:
>>>     [][1]
>>> except A:
>>>     print("Caught")
>>>     
IndexError: list index out of range

奇妙。

继承是你的朋友:只是您定义的单个基本异常的子类,您可以尝试显式捕获此异常,记录并重新抛出它。如果它不是来自您的库,那么错误将不会被捕获。