I am not sure why we need finally
in try...except...finally
statements. In my opinion, this code block
try: run_code1() except TypeError: run_code2() other_code()
is the same with this one using finally
:
try: run_code1() except TypeError: run_code2() finally: other_code()
Am I missing something?
Advertisement
Answer
It makes a difference if you return early:
try: run_code1() except TypeError: run_code2() return None # The finally block is run before the method returns finally: other_code()
Compare to this:
try: run_code1() except TypeError: run_code2() return None other_code() # This doesn't get run if there's an exception.
Other situations that can cause differences:
- If an exception is thrown inside the except block.
- If an exception is thrown in
run_code1()
but it’s not aTypeError
. - Other control flow statements such as
continue
andbreak
statements.