为什么Python异常叫做“错误”?

88 投票
6 回答
21137 浏览
提问于 2025-04-15 23:07

为什么Python中的异常叫“错误”(比如 ZeroDivisionErrorNameErrorTypeError),而不是叫“异常”(比如 ZeroDivisionExceptionNameExceptionTypeException)呢?

我之前是学Java的,最近开始学Python,所以这让我有点困惑,因为在Java中,错误和异常是有区别的。

那么在Python中也有区别吗?

6 个回答

10

在这方面,Python和Java挺像的。不过,Python的异常(Exception)应该和Java的可抛出对象(Throwable)比较。

可抛出对象有很多种,比如错误(Error)、运行时异常(RuntimeException)和(检查型)异常(Exception),Python的异常也是这样,不过没有检查型异常。

从语言的角度来看,错误是非常特殊的,所以它们的继承关系也不奇怪。

不过,我其实不太喜欢“异常”这个名字。因为异常不仅仅用来处理特殊情况(比如错误),还可以用来跳出正常的控制流程。异常的作用就是跳出正常的执行流程,去到一个标记的地方。这有点像“goto”语句,但更精细一些。

也就是说,每当你遇到一种情况,找不到合适的返回值时,你通常会使用异常。这在Python和Java中都是如此。

55

我认为这个约定来源于PEP 8 - Python代码风格指南

异常名称

因为异常应该是类,所以这里也要遵循类的命名规则。不过,如果你的异常确实是一个错误,名称后面应该加上“Error”这个后缀。

105
  1. 你不需要在每个类的名字里加上“Class”,也不需要在每个变量的名字里加上“_variable”。同样,异常的名字里也不需要加“Exception”。名字应该能表达这个对象的意思。比如,“Error”就是大多数异常的意思。

  2. 并不是所有的异常都是错误。像 SystemExitKeyboardInterruptStopIterationGeneratorExit 这些都是异常,但并不是错误。真正的错误名字里会有“Error”这个词,这样就能区分开来。

  3. “Error”这个词比“Exception”短,这样在代码里可以节省一些字符,而且意思不变。这其实是有点区别的。

撰写回答