28

将以下代码:

while True:
    try:
        print("waiting for 10 seconds...")
        continue
        print("never show this")
    finally:
        time.sleep(10)

总是打印消息“等待 10 秒……”,休眠 10 秒,然后再做一次?换句话说,finally即使循环被continue-ed,子句中的语句也会运行吗?

4

3 回答 3

33

来自python 文档

当在 try...finally 语句的 try 套件中执行 return、break 或 continue 语句时,finally 子句也在“退出时”执行。finally 子句中的 continue 语句是非法的。(原因是当前实现存在问题——未来可能会取消此限制)。

于 2012-05-11T03:15:36.197 回答
4

该文档使用稍微不清楚的语言(“在路上”)来解释这种情况是如何发生的。如果在异常子句中执行 continue 语句,则 finally 子句中的代码将被执行,然后循环将继续进行下一次迭代。

这是一个非常清晰的示例,演示了该行为。

代码:

i=0
while i<5:
    try:
        assert(i!=3) #Raises an AssertionError if i==3
        print("i={0}".format(i))
    except:
        continue
    finally:
        i+= 1; #Increment i

'''
Output:

i=0
i=1
i=2
i=4
'''
于 2018-10-12T22:52:52.790 回答
1

现在从最新版本的 python (3.8.4) 开始,可以在“finally”块中使用“continue”。在此处输入图像描述

于 2020-07-23T16:21:35.560 回答