RNA RNA - 4 years ago 125
Python Question

Why do we need the "finally" statement in Python?

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?

Answer Source

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 a TypeError.
  • Other control flow statements such as continue and break statements.
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download