【问题标题】:why should we use Exception as a superclass, why not BaseException为什么我们应该使用 Exception 作为超类,为什么不使用 BaseException
【发布时间】:2013-07-22 01:17:22
【问题描述】:

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

【问题讨论】:

  • 当然可以。你是否应该是一个不同的问题。 Python 只是想让你更难自爆,但如果你坚持,没人会阻止你:)

标签: python exception python-2.7 superclass


【解决方案1】:

根据Python2 documentation,有四个例外是BaseException 的派生词:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 2011-04-22
      • 2011-05-16
      • 2021-10-25
      相关资源
      最近更新 更多