为什么Pythonexception名为“Error”?
为什么Pythonexception名为“Error”(例如ZeroDivisionError
, NameError
, TypeError
)而不是“Exception”(例如ZeroDivisionException
, NameException
, NameException
)。
我来自Java背景,最近开始学习Python,因为这是令人困惑的,因为在Java中,错误和exception是有区别的。
Python中是否有区别呢?
-
你不能用名字中的'Class'命名每个类,每个名字中都带有'_variable'的variables。 使用“例外”这个词来表示同一个名字,并不能指定exception。 这个名字应该说明对象的含义。 “错误”是大多数例外的含义。
-
并非所有exception都是错误。
SystemExit
,KeyboardInterrupt
,StopIteration
,GeneratorExit
都是exception而不是错误。 实际错误中的“错误”一词显示了差异。 -
“错误”比“例外”短。 在代码宽度中可以保存几个字符,而不会丢失任何意义。 这有一些区别。
我相信这个惯例来自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
结束,那么这种区别是不可能的。
警告的例子是DeprecationWarning
和ImportWarning
。
请参阅内置exception的2.x类层次结构以及3.x。
这只是命名。 在Java中,您有与其他Throwable
不同的java.lang.Error
,因为这些types的错误需要被取消选中。 在Python中,所有exception都是未经检查的,所以区别是没有意义的。
- 为什么在将客户端JBoss连接回收到远程队列之后仍然抛出SpyJMSExceptionexception?
- devise模式:exception/error handling
- Mockito如何模拟和断言抛出exception?
- CacheProvider的exceptionNoClassDefFoundError
- 在使用Python with语句时捕捉exception
- 在Python中,如何捕获警告,就像它们是exception?
- 如何将traceback / sys.exc_info()值保存在variables中?
- Javaexception未捕获?
- asynchronousnode.js调用中的error handling