为什么在Python中建议从Exception派生,而不是从BaseException类派生?

为什么在Python中建议从Exception派生,而不是从BaseException类派生?,python,exception,Python,Exception,声明说,“鼓励程序员从Exception类或它的一个子类派生新的异常,而不是从BaseException派生新的异常”。没有进一步解释原因 我很好奇为什么建议这样做?这仅仅是为了保留Python开发人员所设想的功能吗 目录(基本异常)=目录(异常) 真的 从BaseException派生的异常有:GeneratorExit,键盘中断,系统退出 根据文件: :在调用生成器的close()方法时引发。它直接继承自BaseException,而不是StandardError,因为它在技术上不是错误

声明说,“鼓励程序员从Exception类或它的一个子类派生新的异常,而不是从BaseException派生新的异常”。没有进一步解释原因

我很好奇为什么建议这样做?这仅仅是为了保留Python开发人员所设想的功能吗

目录(基本异常)=目录(异常) 真的
BaseException
派生的异常有:
GeneratorExit
键盘中断
系统退出

根据文件:

  • :在调用生成器的close()方法时引发。它直接继承自BaseException,而不是StandardError,因为它在技术上不是错误
  • :当用户点击中断键(通常为Control-C或Delete)时引发。在执行过程中,定期检查中断情况。当内置函数input()或raw_input()等待输入时键入的中断也会引发此异常该异常继承自BaseException,以便不会被捕获异常的代码意外捕获,从而阻止解释器退出。
  • :异常继承自BaseException,而不是StandardError或exception,以便捕获异常的代码不会意外捕获它这允许异常正确向上传播并导致解释器退出。
所以通常的原因是防止
try。。。异常除外
意外阻止解释器退出(生成退出除外

看到Ashwini Chaudhary的评论后更新

解释原因

异常层次结构现在更加重要,因为它具有 基本根目录,需要对现有层次结构进行更改。因为它 如果想要捕获所有发出错误信号的异常,那么现在就站起来 但这并不意味着应该允许口译员退出,你必须 在except子句中指定除两个例外情况以外的所有例外情况,或 分别捕获这两个异常,然后重新引发它们并 除以下条款外,所有其他例外情况均为单独条款:

except (KeyboardInterrupt, SystemExit):
    raise
except:
    ...
这是不必要的明确。该政治公众人物提议采取行动 键盘中断和系统退出直接从 基本例外

这很好地解释了这一点。