为什么Pythonexception名为“Error”?

为什么Pythonexception名为“Error”(例如ZeroDivisionErrorNameErrorTypeError )而不是“Exception”(例如ZeroDivisionExceptionNameExceptionNameException )。

我来自Java背景,最近开始学习Python,因为这是令人困惑的,因为在Java中,错误和exception是有区别的。

Python中是否有区别呢?

  1. 你不能用名字中的'Class'命名每个类,每个名字中都带有'_variable'的variables。 使用“例外”这个词来表示同一个名字,并不能指定exception。 这个名字应该说明对象的含义。 “错误”是大多数例外的含义。

  2. 并非所有exception都是错误。 SystemExitKeyboardInterruptStopIterationGeneratorExit都是exception而不是错误。 实际错误中的“错误”一词显示了差异。

  3. “错误”比“例外”短。 在代码宽度中可以保存几个字符,而不会丢失任何意义。 这有一些区别。

我相信这个惯例来自PEP 8 – Python代码风格指南 :

例外名称

因为exception应该是类,所以类命名约定在这里适用。 但是,您应该在exception名称上使用后缀“错误”(如果exception实际上是错误)。

Python在这方面与Java非常相似。 但是Python的exception应该与Java的Throwable进行比较。

由于Throwables有各种各样的味道 – 错误,RuntimeException和(checked)exception – 所以做Python的(虽然没有检查exception)。

至于语言,错误是例外的,所以inheritance层次并不奇怪。

虽然我不特别喜欢这个名字。 例外情况不仅用于特殊的情况(如有希望的错误),而且也是为了摆脱控制stream。 因为这是一个例外; 它跳出正常的控制stream程到一个显着的点。 有点像goto,但更精致。

也就是说,每次遇到无法find合适的返回值的情况时,都会使用exception。 在Python中和在Java中一样。

问:为什么Pythonexception名为“错误”?

我猜测这是因为大多数 Pythonexception被分类为错误警告 。 如果Pythonexception的名称以Exception结束,那么这种区别是不可能的。

警告的例子是DeprecationWarningImportWarning

请参阅内置exception的2.x类层次结构以及3.x。

这只是命名。 在Java中,您有与其他Throwable不同的java.lang.Error ,因为这些types的错误需要被取消选中。 在Python中,所有exception都是未经检查的,所以区别是没有意义的。