为什么我们应该使用Exception作为超类,为什么不使用BaseException

时间:2013-07-23 05:41:13

标签: python exception python-2.7 superclass

在python中,每当我们编写用户定义的异常时,我们都必须从类Exception扩展它。 我的问题是为什么我们不能从BaseException扩展它,它是异常层次结构的超类,Exception也是BaseException的子类。

2 个答案:

答案 0 :(得分:8)

BaseException包含KeyboardInterruptSystemExit之类的内容,它们使用异常机制,但大多数人都不应该抓住它。如果您熟悉它,它类似于Java中的Throwable。直接从BaseException派生的内容通常用于在执行finally块和上下文管理器__exit__方法时关闭系统以释放资源。

答案 1 :(得分:3)

根据Python2 documentation,有四个例外是BaseException的衍生物:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception

不是Exception的三个实际上并不是错误,这意味着通常你不想把它们当作错误来捕获它们。 Python2.5中添加了BaseException(在此之前,没有BaseException,其他例外是​​Exception的子类。)