【发布时间】:2020-06-27 17:33:52
【问题描述】:
我来自 Java,其中异常和错误是完全不同的东西,它们都源自名为 Throwable 的东西。
在 Java 中,您通常不应该尝试捕获错误。
在 Python 中,虽然区别似乎很模糊。
到目前为止,在阅读了一些文档并检查了 the hierarchy 之后,我有以下问题:
语法错误当然会导致您的程序根本无法启动。正确的?
“在执行过程中检测到的错误称为异常,并不是无条件致命的”(根据the tutorial)。这里的“致命”是什么意思?此外,一些像 AttributeError 这样的对象(根据上面的定义)实际上是异常,即使它们的名称中包含 Error,这个结论是否正确?
某些类派生自 Exception 但名称中包含 Error。这不是很混乱吗?但即便如此,这意味着名称中的 Error 并没有什么特别之处,它仍然是一个 Exception。或不... ?
“所有内置的、非系统退出的异常都源自 [Exception]”(引用自 here)
那么哪些是系统退出异常,哪些不是?目前还不清楚。所有用户定义的异常也应该从 Exception 派生。所以基本上作为一个初学者,除了异常,我还需要担心其他什么吗?好像没有。警告也来自异常。那么警告是致命的还是系统退出的,还是都没有?
AssertionError 适合所有这些吗?它是致命的还是系统退出?
如何知道或指定某个异常类代表致命或系统退出异常?
【问题讨论】:
-
正确,为了您的目的,只有例外。
-
不确定这些东西在 Java 中有何不同,但在 PHP 中,“错误”基本上只是在屏幕/日志中产生错误消息,而异常是可以通过 @ 分层处理的东西987654325@。从这个意义上说,Python 没有做出这种区分。每个可能的错误都是异常,可以通过
try..except处理。