Python: Using continue in a try-finally statement in a loop
Asked Answered
M

3

34

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?

Maneater answered 11/5, 2012 at 3:11 Comment(1)
@AndrewG., the point of asking the question was so that this information be more easily find-able. It took me a few minutes to come up with that example. :)Maneater
S
41

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

Simonton answered 11/5, 2012 at 3:15 Comment(1)
As of Python 3.8 continue statements are legal within the finally clause.Americium
L
5

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
'''
Lully answered 12/10, 2018 at 22:52 Comment(1)
What exactly would be unclear in the original documentation?Coyotillo
W
1

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

Wisent answered 23/7, 2020 at 16:21 Comment(1)
Welcome to stackoverflow. It's always best to post code as text, not as images. Others can then copy/paste to try it. Highlight the code and press Ctrl+k or highlight and click the '{}' symbol in the answer box.Quern

© 2022 - 2025 — McMap. All rights reserved.