Python-尝试除外

时间:2019-09-16 19:35:18

标签: python python-3.x

我试图了解Python的try-except构造。它似乎很复杂,因为它具有可选的finallyelse子句。另外,其中可能涉及returnbreakcontinue。您可以决定是否命名所捕获的异常等。

无论如何,我想我现在已经很好地理解了控制流程,但这是Python文档的引文,对我来说似乎是错误的。

  

以下几点讨论了发生异常时更复杂的情况:

     

如果在try子句执行期间发生异常,则可以由except子句处理该异常。在所有情况下,执行finally子句后都会重新引发异常。

引号来自https://docs.python.org/3/tutorial/errors.html

Point 8.6

最后一句话似乎不正确。那是什么意思?似乎是错误的。我的测试表明,如果捕获并处理了该异常,则不会重新引发该异常(当然)。那么...文档中的注释是什么意思?

有人可以解释吗?

编辑: 在我问了这个问题之后,似乎有人修复了文档页面。是吗?

1 个答案:

答案 0 :(得分:1)

我只是看了一下,因为这对我来说也很奇怪。我认为那里的措辞很不好。您完全正确,如果在except块中处理该异常,则不会重新引发该异常。

他们指的是没有捕获到此类异常的情况:

  

如您所见,finally子句在任何情况下都会执行。的   通过除以两个字符串引发的TypeError不由except处理   子句,因此在finally子句被添加后重新引发   被执行。

这来自the same example you posted,仅在下面几行之内。

所以,总结一下。文档可能应该说:

  

如果在执行try子句期间发生异常,则   异常可以由except子句处理。在任何情况下,   在执行finally子句后,如果未在例外块之一中捕获,则会重新引发异常。

正如讨论中所指出的那样,这似乎是预期的措辞:

  

如果在执行try子句期间发生异常,则   异常可以由except子句处理。在所有其他情况下,   在执行finally子句后会重新引发异常。