Python Forum

Full Version: Exception Handling
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,

There are two constructs that Python offers on exceptions. One is try-except-finally and the other is try-finally.

I am trying to understand in which situations do we use try-finally? Since using try-finally we cannot catch any exceptions then why does Python provide this construct, when we can use the try-except-finally.

Thanks.
They are not exclusive. Look at this example from PEP 341:

try:
    block-1 ...
except Exception1:
    handler-1 ...
except Exception2:
    handler-2 ...
else:
    else-block
finally:
    final-block
First, block-1 executes. If block-1 raises Exception1, then handler-1 is executed. If block-1 raises Exception2, then handler-2 is executed. If block-1 raises no exceptions, then the else-block is executed. Finally, no matter what happened in block-1, final-block is executed. Note that final-block is executed even if block-1 raises an exception besides Exception1 or Exception2, which would skip handler-1, handler-2, and else-block.

The except clause is for handling what happens with a given error. The finally block is for something you do no matter what happens. The except block is typically for redoing the processing in a different manner based on the exception raised. The finally block is typically for cleaning up resources. Say you opened a file in block-1. You could use the final-block to close the file. Of course, we have context managers and the with statement for handling files now. But this common use for cleaning up files is why the with statement was created.
you can have a try: ... except ValueError ... finnaly ...
sequence for example.
if there is a ValueError raised during the try clause, the except clause will be executed, but not if there as an exception that is not a value error. In both cases, finally will be executed.
try/finally allows you to ignore exceptions. Maybe someone smarter than me can think of a compelling use case for such a construct Think , but my guess will be that interpreter checks that either except or finally block(s) follow the try block.

Being given the rope does not mean that you should hang yourself, though