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

Question:

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?

Asked By: Andres Riofrio

||

Answers:

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).

Answered By: Joel Cornett

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
'''
Answered By: Ross Gibson

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

Answered By: Ronit Roy
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.