【问题标题】:why we should not exted BaseException class? [duplicate]为什么我们不应该扩展 BaseException 类? [复制]
【发布时间】:2013-07-26 08:08:46
【问题描述】:

为什么我们不应该扩展 BaseException 类来创建我们自己的异常,而不是在 Python2.7 中扩展 Exception 类?

【问题讨论】:

    标签: python


    【解决方案1】:

    我们来看看Exception hierarchy

    BaseException 派生的唯一例外是SystemExitKeyboardInterruptGeneratorExit。它们是不应被意外捕获的例外。这就是它们不同的原因。

    引用KeyboardInterrupt:

    异常从 BaseException 继承,以免被捕获 Exception 的代码意外捕获,从而阻止解释器退出。

    这也是为什么你不应该在不指定异常类型的情况下使用try: ... except: ...

    【讨论】:

    • 感谢您回答我的问题。我找到了一些答案,在 BaseException 中有一个 finally 块,它具有 __exit__() 方法,导致退出应用程序。这就是我们不应该扩展 BaseException 而不是 Exception 类的原因......
    • 这毫无意义。 Exception 扩展了 BaseException,因此 Exception 具有 __exit__()。事实上,任何未捕获的异常都会退出应用程序。你能给我一个̶n̶̶e̶x̶c̶e̶p̶t̶i̶o̶n̶一个链接吗?
    • __exit__() 是上下文管理器挂钩,不会退出应用程序。 sys.exit() 退出应用程序。
    猜你喜欢
    • 2013-07-22
    • 2017-12-06
    • 1970-01-01
    • 2013-08-21
    • 2010-11-11
    • 2019-05-09
    • 2011-03-15
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多