[Python-ideas] Make return inside a finally a SyntaxError
MRAB
python at mrabarnett.plus.com
Sat Jul 18 02:41:11 CEST 2009
MRAB wrote:
> Michael wrote:
>> Here are two examples of why allowing return inside a finally block is
>> a bad idea:
>>
>> def f():
>> try:
>> return 3
>> finally:
>> return 4
>>
>> def f():
>> try:
>> raise Exception()
>> finally:
>> return 4
>>
> I wouldn't call that a syntax error. Wouldn't you also have to forbid
> break, continue and, perhaps, yield?
>
I shouldn't checked before posting... :-(
Test 1: break swallows the exception.
>>> for n in range(3):
try:
print n
raise IndexError
finally:
break
0
Test 2: continue raises a SyntaxError.
>>> for n in range(2):
try:
print n
raise IndexError
finally:
continue
SyntaxError: 'continue' not supported inside 'finally' clause
Test 3: yield propagates the exception on resuming.
>>> def test():
for n in range(3):
try:
print n
raise IndexError
finally:
print "yielding", n
yield n
>>> t = test()
>>> t.next()
0
yielding 0
0
>>> t.next()
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
t.next()
File "<pyshell#21>", line 5, in test
raise IndexError
IndexError
More information about the Python-ideas
mailing list