Python: Using continue in a try-finally statement in a loop

青春壹個敷衍的年華 提交于 2020-12-04 15:16:04

问题


Will the following code:

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

Always print the message "waiting for 10 seconds...", sleep for 10 seconds, and do it again? In other words, do statements in finally clauses run even when the loop is continue-ed?


回答1:


From the python docs:

When a return, break or continue statement is executed in the try suite of a try...finally statement, the finally clause is also executed ‘on the way out.’ A continue statement is illegal in the finally clause. (The reason is a problem with the current implementation — this restriction may be lifted in the future).




回答2:


The documentation uses slightly unclear language ("on the way out") to explain how this scenario plays out. If a continue statement is executed inside of an exception clause, the code in the finally clause will be executed and then the loop will continue on to the next iteration.

Here's a very clear example that demonstrates the behavior.

Code:

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
'''



回答3:


Now from the latest version of python (3.8.4) , 'continue' can be used inside 'finally' blocks.enter image description here



来源:https://stackoverflow.com/questions/10544928/python-using-continue-in-a-try-finally-statement-in-a-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!