为什么Python异常名为"Error"?

Ele*_*ena 70 python java exception

为什么Python的异常命名为"错误"(例如ZeroDivisionError,NameError,TypeError),而不是"例外"(例如ZeroDivisionException,NameException,TypeException).

我来自Java背景并且最近开始学习Python,因此这令人困惑,因为在Java中,错误和异常之间存在区别.

Python也有区别吗?

Jac*_*zny 84

  1. 您没有在名称中使用"Class"命名每个类,并且在名称中使用"_variable"命名每个变量.您没有使用"Exception"一词命名异常.名称应该说明对象的含义.'错误'是大多数例外的含义.

  2. 并非所有例外都是错误.SystemExit,KeyboardInterrupt,StopIteration,GeneratorExit都是例外,而不是错误.实际错误中的"错误"一词显示了差异.

  3. '错误'比'异常'短.可以在代码宽度中保存几个字符而不会丢失意义.这有所不同.

  • *并非所有异常都是错误*:实际上,有许多异常来自名为`Warning`的异常类.请参阅[我的回答](http://stackoverflow.com/a/28971626/1497596). (2认同)
  • 这是一个很棒的可视化 https://docs.python.org/2/library/exceptions.html#exception-hierarchy (2认同)

dao*_*oad 44

我相信这个约定来自PEP 8 - Python代码风格指南:

例外名称

因为异常应该是类,所以类命名约定适用于此处.但是,您应该在异常名称上使用后缀"Error"(如果异常实际上是错误).


ext*_*eon 8

在这方面,Python与Java非常相似.但Python的Exception应该与Java的Throwable进行比较.

由于Throwables有各种各样的样式 - Error,RuntimeException和(checked)异常 - 所以Python也是如此(尽管没有经过检查的异常).

至于语言,错误是例外,因此继承层次结构并不奇怪.

我不是特别喜欢Exception这个名字.异常不仅用于特殊情况(如希望错误),而且还可以用于控制流程.因为这就是Exception所做的事情; 它跳出正常的控制流程到一个标记点​​.有点像goto,但更精致.

也就是说,每当您遇到无法找到合适返回值的情况时,您往往会使用异常.Python和Java一样.


Dav*_*dRR 7

\n

问:为什么 Python 异常名为 \xe2\x80\x9cError\xe2\x80\x9d?

\n
\n\n

我推测这是因为大多数Python 异常都被分类为错误警告。如果 Python 异常的名称以 结尾Exception,则无法进行这种区分。

\n\n

警告的示例有DeprecationWarningImportWarning

\n\n

请参阅2.x 类层次结构以了解内置异常以及3.x的类层次结构。

\n


gus*_*afc 1

这只是命名而已。在 Java 中,您java.lang.Error与其他Throwable错误不同,因为这些类型的错误需要不被检查。在 Python 中,所有异常都是未经检查的,因此这种区别是毫无意义的。

  • 除了其他人发布的其他原因之外,请记住 Python 标准库中的命名并不总是一致的。 (2认同)