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