为什么Python的异常命名为“错误”(例如ZeroDivisionError
,NameError
,TypeError
),而不是“例外”(例如ZeroDivisionException
,NameException
,TypeException
)。
我来自Java背景,最近开始学习Python,这令人困惑,因为在Java中错误与异常之间是有区别的。
Python也有区别吗?
Answers:
您不会将每个类的名称命名为“ Class”,也不会将每个变量的名称命名为“ _variable”。以相同的方式,您不会使用单词“ Exception”来命名异常。名称应说明对象的含义。“错误”是大多数例外的含义。
并非所有的异常都是错误。SystemExit
,KeyboardInterrupt
,StopIteration
,GeneratorExit
都是例外,而不是错误。实际错误中的“错误”一词表明了差异。
“错误”比“异常”短。这样可以节省代码宽度中的几个字符,而不会造成任何意义上的损失。这有所不同。
我相信此约定来自PEP 8-Python代码样式指南:
异常名称
因为异常应该是类,所以在这里适用类命名约定。但是,您应该在异常名称上使用后缀“ Error”(如果异常实际上是一个错误)。
在这方面,Python非常类似于Java。但是应该将Python的Exception与Java的Throwable进行比较。
由于Throwables具有各种形式-错误,RuntimeException和(检查的)异常-Python的也是如此(尽管没有检查的异常)。
至于语言,错误是例外,因此继承层次结构并不奇怪。
我不太喜欢Exception这个名字。异常不仅用于特殊情况(如希望的错误),而且还用于脱离控制流程。因为那是异常的作用;它跳出正常的控制流程,到达标记点。有点像goto,但更加精致。
就是说,每次遇到找不到合适的返回值的情况时,您都倾向于使用Exception。两者都在Python和Java中一样。
Error
以它们的名字命名的问题。
问:为什么Python异常名为“错误”?
我猜这是因为大多数Python异常都归类为错误或警告。如果Python异常的名称以结尾Exception
,则无法进行这种区分。
警告示例包括DeprecationWarning
和ImportWarning
。
请参阅2.x类的层次结构以了解内置异常以及3.x的内部异常。
简单的说:
Exception
也可以直接提出概念:
我通常会做这件事,但我要作一个例外
要么
通常这将是一个错误,但是我们将创建一个异常,将其捕获并执行一些过程。
细节:
异常与错误:
https://docs.python.org/2/tutorial/errors.html
执行期间检测到的错误称为异常,并且不是无条件致命的
工作流程:
这只是命名。在Java中,您java.lang.Error
与其他人有区别,Throwable
因为这些类型的错误需要取消检查。在Python中,所有异常均未选中,因此区别是毫无意义的。
class ExceptionHandlingException extends RuntimeException
,这简直太可怕了。
Warning
。请看我的回答。