2017-07-25 69 views
2

我有一系列定义的异常,这取决于问题以及用户的自定义消息。检测异常类型

我想开发错误使用这些自定义异常处理的机制,让他们泡到一个更高级别的日志记录类,并最终给用户,使我们可以提供反馈,并告诉他们要解决什么。它甚至可能是后端系统退出,所以他们知道稍后会回来。

但是,如果它不是手动创建一个例外,它是一个系统异常(这些被提出,但包裹在一个自定义异常),我想返回的一般错误。

当我处理我的例外,是什么来检测,如果它是我的什么我没占到一个好办法?

我在想一个基地一个带有自定义属性下继承我所有的异常,让异常冒泡时检查它,但它似乎有点哈克。

谢谢

回答

4

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

现在,看我怎么从共享基类派生乙?

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 

很好。

继承是您的朋友:从您定义的单个碱基例外只要继承,你可以尝试明确捕获这个异常,登录,并重新抛出。如果它不是来自你的图书馆,那么错误将不会被捕获。

+1

不错,正是我在找的东西。我没有意识到除了会检查父类。 – browskie