Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Exceptions finally

  • finally

  • We can add a "finally" section to the end of the "try" - "except" construct.

  • The code in this block will be executed after every time we enter the try.

  • When we finish it successfully. When we catch an exception. (In this case a ZeroDivisionError exception in file zero.txt" %}

  • Even when we don't catch an exception. Before the exception propagates up in the call stack, we still see the "finally" section executed.

import sys
import module

# python finally.py one.txt zero.txt two.txt three.txt
files = sys.argv[1:]

for filename in files:
    try:
        module.read_and_divide(filename)
    except ZeroDivisionError as err:
        print("Exception {} of type {} in file {}".format(err, type(err).__name__, filename))
    finally:
        print("In finally after trying file {}".format(filename))
    print('')

Output:

before one.txt
100.0
after  one.txt
In finally after trying file one.txt

before zero.txt
Exception division by zero of type ZeroDivisionError in file zero.txt
In finally after trying file zero.txt

before two.txt
In finally after trying file two.txt
Traceback (most recent call last):
  File "finally.py", line 9, in <module>
    module.read_and_divide(filename)
  File "/home/gabor/work/slides/python-programming/examples/exceptions/module.py", line 3, in read_and_divide
    with open(filename, 'r') as fh:
FileNotFoundError: [Errno 2] No such file or directory: 'two.txt'