Weird Try-Except-Else-Finally behavior with Return statements

Because finally statements 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:

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

The return value of a function is determined by the last return statement executed. Since the finally clause always executes, a return statement executed in the finally clause will always be the last one executed:

This means that when you try to return, the finally block is called, returning it’s value, rather than the one that you would have had.

Leave a Comment