在Python中是否有任何Exception超类,比如Throwable of Java Exception?

时间:2015-06-23 07:06:32

标签: python exception hierarchy

Python中的Exception超类是什么?请提供Python异常层次结构。

2 个答案:

答案 0 :(得分:4)

您正在寻找BaseException

用户定义的异常类型应该是Exception的子类。

请参阅docs

答案 1 :(得分:3)

Exception的基类:

>>> Exception.__bases__
(BaseException,)
来自文档的

Exception hierarchy确认它是所有异常的基类:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
...

捕获所有异常的语法是:

try:
    raise anything
except: 
    pass

注意:非常谨慎地使用它,例如,你可以在清理过程中使用__del__方法,当世界可能被半毁坏时,没有其他选择。

Python 2允许引发不是从BaseException派生的异常:

>>> raise 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: exceptions must be old-style classes or derived from BaseException, not int
>>> class A: pass
... 
>>> raise A
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.A: <__main__.A instance at 0x7f66756faa28>

在Python 3中修复了强制执行规则的内容:

>>> raise 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: exceptions must derive from BaseException