问题
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