我来自 Java,其中 Exceptions 和 Errors 是完全不同的东西,它们都源自于一个叫做Throwable. 在 Java 中,您通常不应该尝试捕获错误。
在 Python 中,虽然区别似乎很模糊。
到目前为止,在阅读了一些文档并检查了层次结构后,我有以下问题:
存在语法错误,这当然会导致您的程序根本无法启动。对?
“在执行过程中检测到的错误称为异常,并不是无条件致命的”(根据教程)。这里的“致命”是什么意思?此外,一些像 AttributeError 这样的对象(根据上面的定义)实际上是异常,即使它们的名称中包含 Error,这个结论是否正确?
一些类派生自 Exception 但在其名称中包含 Error。这不是令人困惑吗?但即便如此,这也意味着名称中的 Error 并没有什么特别之处,它仍然是一个 Exception。或不... ?
“所有内置的非系统退出异常都源自 [Exception]”(引自此处)
那么哪些是系统退出异常,哪些不是?目前还不清楚。所有用户定义的异常也应该从 Exception 派生。所以基本上作为初学者,除了 Exception 之外,我还需要担心其他任何事情吗?好像没有。
警告也源自异常。那么警告是致命的还是系统退出的,或者这些都不是?
AssertionError 在哪里适合所有这些?它是致命的还是系统退出?
如何知道或指定某个 Exception 类表示致命的或系统退出的异常?
Sha*_*ger 10
SyntaxError除非在动态执行的代码(通过eval/ exec)的情况下,否则无法捕获,因为它发生在代码实际运行之前。os._exit可以强行杀死进程,但它是通过绕过异常机制来实现的。BaseException,但不是源自Exception。但是它们可以像任何其他异常一样被捕获Exception意味着它们不在“系统退出”类别中AssertionError只是另一个Exception子类,所以它不是“系统退出”。它只是与assert具有特殊语义的语句相关联。BaseException但不是Exception(例如SystemExit,KeyboardInterrupt)的东西“不合理捕捉”(或者如果你确实捕捉到它们,它应该几乎总是记录/执行清理并重新抛出它们),其他一切(也源自Exception)是“有条件的合理捕捉”。没有其他区别。需要说明的是,“系统退出”只是表示“except Exception:抓不到的东西”;如果不except涉及任何块,则所有异常(除了警告,如前所述,根据警告过滤器的不同行为)都是“系统退出”。
| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |