This is some code that is behaving peculiarly. This is a simplified version of the behavior that I’ve written. This will still demonstrate the weird behavior and I had some specific questions on why this is occurring.
I’m using Python 2.6.6 on Windows 7.
def demo1():
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
def demo2():
try:
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
except:
print 4
else:
print 5
finally:
print 6
Results:
>>> print demo1()
3
>>> print demo2()
6
3
- Why is demo one returning 3 instead of 1?
- Why is demo two printing 6 instead of printing 6 w/ 4 or 5?
Because
finallystatements are guaranteed to be executed (well, presuming no power outage or anything outside of Python’s control). This means that before the function can return, it must run the finally block, which returns a different value.The Python docs state:
This means that when you try to return, the
finallyblock is called, returning it’s value, rather than the one that you would have had.