我试图了解Python的try-except构造。它似乎很复杂,因为它具有可选的finally
和else
子句。另外,其中可能涉及return
,break
,continue
。您可以决定是否命名所捕获的异常等。
无论如何,我想我现在已经很好地理解了控制流程,但这是Python文档的引文,对我来说似乎是错误的。
以下几点讨论了发生异常时更复杂的情况:
如果在try子句执行期间发生异常,则可以由except子句处理该异常。在所有情况下,执行finally子句后都会重新引发异常。
引号来自https://docs.python.org/3/tutorial/errors.html
Point 8.6
最后一句话似乎不正确。那是什么意思?似乎是错误的。我的测试表明,如果捕获并处理了该异常,则不会重新引发该异常(当然)。那么...文档中的注释是什么意思?
有人可以解释吗?
编辑: 在我问了这个问题之后,似乎有人修复了文档页面。是吗?
答案 0 :(得分:1)
我只是看了一下,因为这对我来说也很奇怪。我认为那里的措辞很不好。您完全正确,如果在except
块中处理该异常,则不会重新引发该异常。
他们指的是没有捕获到此类异常的情况:
如您所见,finally子句在任何情况下都会执行。的 通过除以两个字符串引发的TypeError不由except处理 子句,因此在finally子句被添加后重新引发 被执行。
这来自the same example you posted,仅在下面几行之内。
所以,总结一下。文档可能应该说:
如果在执行try子句期间发生异常,则 异常可以由except子句处理。在任何情况下, 在执行finally子句后,如果未在例外块之一中捕获,则会重新引发异常。
正如讨论中所指出的那样,这似乎是预期的措辞:
如果在执行try子句期间发生异常,则 异常可以由except子句处理。在所有其他情况下, 在执行finally子句后会重新引发异常。