Python:在循环中使用try-finally语句中的continue

34

以下代码是否会:

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

始终打印消息“等待10秒钟…”,休眠10秒钟,然后再次执行?换句话说,在循环被 continue 中断时,finally 子句中的语句是否会运行?


12
@AndrewG.,提出这个问题的重点是为了使这些信息更容易被找到。我花了几分钟时间才想出那个例子 :) - Andres Riofrio
3个回答

40

来自Python文档

当在try语句块中执行return、break或continue语句时,在退出该语句块的同时,finally语句也会被执行。在finally语句块中使用continue语句是不合法的。(原因是当前实现存在问题——这个限制在未来可能会被取消)。


9
自 Python 3.8 版本起,finally 子句中可以使用 continue 语句。 - Carter

5

文档使用了不太清晰的语言(“on the way out”)来解释这种情况是如何发生的。如果在异常子句中执行了一个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
'''

原始文档中到底有什么不清楚的地方? - Wojciech Kaczmarek

1

1
欢迎来到stackoverflow。最好将代码作为文本发布,而不是作为图像。这样其他人就可以复制/粘贴以尝试它。请高亮显示代码并按Ctrl+k或在答案框中单击“{}”符号。 - Tls Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接