Why is break allowed in finally, but continue is not?

Ned Batchelder ned at nedbatchelder.com
Sun Dec 13 16:10:03 EST 2015


For testing coverage.py, I wrote a program to generate
randomly-structured Python functions.  When compiling
the results, I got a message I'd never seen before:

SyntaxError: 'continue' not supported inside 'finally' clause

I guess this makes sense, when cleaning up from an
exception, continuing the loop seems an odd thing to do.
But 'break' is allowed in 'finally' clauses!  I tried this:

    # Huh? This prints "here", and no exception is raised.

    for i in range(1):
        try:
            1/0
        finally:
            # If you change this to "continue", you get:
            # 'continue' not supported inside 'finally' clause
            break
    print "here"

The finally is perfectly willing to have a 'break', but it's
a syntax error to have 'continue'?  Why? I don't see a
difference between the two when it comes to cleaning up
exceptions.

There are other things you can do in a finally clause that
will prevent the exception from being raised, like 'return',
and 'break' works just fine.

So why treat 'continue' specially?

--Ned.



More information about the Python-list mailing list