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

And*_*rio 17 python continue try-finally

请问以下代码:

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

始终打印"等待10秒......"的消息,睡10秒钟,然后再做一次?换句话说,finally即使循环是continue-ed ,子句中的语句也会运行吗?

Joe*_*ett 23

python文档:

当在try ... finally语句的try套件中执行return,break或continue语句时,finally子句也会在"出路"中执行.continue语句中的continue语句是非法的.(原因是当前实施存在问题 - 将来可能会解除此限制).

  • [从 Python 3.8 开始](https://docs.python.org/dev/whatsnew/3.8.html#other-language-changes) continue 语句在 finally 子句中是合法的。 (6认同)

小智 5

该文档使用稍微不清楚的语言(“正在退出”)来解释这种情况是如何发生的。如果在异常子句内执行 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
'''
Run Code Online (Sandbox Code Playgroud)