在python中,每当我们编写用户定义的异常时,我们都必须从类Exception
扩展它。
我的问题是为什么我们不能从BaseException
扩展它,它是异常层次结构的超类,Exception
也是BaseException
的子类。
答案 0 :(得分:8)
BaseException
包含KeyboardInterrupt
和SystemExit
之类的内容,它们使用异常机制,但大多数人都不应该抓住它。如果您熟悉它,它类似于Java中的Throwable
。直接从BaseException
派生的内容通常用于在执行finally
块和上下文管理器__exit__
方法时关闭系统以释放资源。
答案 1 :(得分:3)
根据Python2 documentation,有四个例外是BaseException
的衍生物:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
不是Exception
的三个实际上并不是错误,这意味着通常你不想把它们当作错误来捕获它们。 Python2.5中添加了BaseException
(在此之前,没有BaseException
,其他例外是Exception
的子类。)