【发布时间】:2013-07-26 08:08:46
【问题描述】:
为什么我们不应该扩展 BaseException 类来创建我们自己的异常,而不是在 Python2.7 中扩展 Exception 类?
【问题讨论】:
标签: python
为什么我们不应该扩展 BaseException 类来创建我们自己的异常,而不是在 Python2.7 中扩展 Exception 类?
【问题讨论】:
标签: python
我们来看看Exception hierarchy。
从BaseException 派生的唯一例外是SystemExit、KeyboardInterrupt 和GeneratorExit。它们是不应被意外捕获的例外。这就是它们不同的原因。
异常从 BaseException 继承,以免被捕获 Exception 的代码意外捕获,从而阻止解释器退出。
这也是为什么你不应该在不指定异常类型的情况下使用try: ... except: ...。
【讨论】:
__exit__()。事实上,任何未捕获的异常都会退出应用程序。你能给我一个̶n̶̶e̶x̶c̶e̶p̶t̶i̶o̶n̶一个链接吗?
__exit__() 是上下文管理器挂钩,不会退出应用程序。 sys.exit() 退出应用程序。