9.9 finally Clause

The finally Clause of the try Statement

  • try statement may have a finally clause after any except clauses or the else clause
  • finally clause is guaranteed to execute
    • In other languages, this makes the finally suite ideal for resource-deallocation code
    • In Python, we prefer the with statement for this purpose

Example

In [1]:
try:
    print('try suite with no exceptions raised')
except:
    print('this will not execute')
else:
    print('else executes because no exceptions in the try suite')
finally:  
    print('finally always executes')
    
try suite with no exceptions raised
else executes because no exceptions in the try suite
finally always executes
In [2]:
try:
    print('try suite that raises an exception')
    int('hello')
    print('this will not execute')
except ValueError:
    print('a ValueError occurred')
else:
    print('else will not execute because an exception occurred')
finally:  
    print('finally always executes')
    
try suite that raises an exception
a ValueError occurred
finally always executes

Combining with Statements and try…except Statements

  • Most resources that require explicit release, such as files, network connections and database connections, have potential exceptions associated with processing those resources
  • Robust file-processing code normally appears in a try suite containing a with statement to guarantee that the resource gets released
In [3]:
open('gradez.txt')  # non-existent file
------------------------------------------------------------------------
FileNotFoundError                      Traceback (most recent call last)
<ipython-input-3-5b552683292b> in <module>
----> 1 open('gradez.txt')  # non-existent file

FileNotFoundError: [Errno 2] No such file or directory: 'gradez.txt'
In [4]:
try:
    with open('gradez.txt', 'r') as accounts:
        print(f'{"ID":<3}{"Name":<7}{"Grade"}')
        for record in accounts:  
            student_id, name, grade = record.split()
            print(f'{student_id:<3}{name:<7}{grade}')
except FileNotFoundError:
    print('The file name you specified does not exist')
    
The file name you specified does not exist

©1992–2020 by Pearson Education, Inc. All Rights Reserved. This content is based on Chapter 5 of the book Intro to Python for Computer Science and Data Science: Learning to Program with AI, Big Data and the Cloud.

DISCLAIMER: The authors and publisher of this book have used their best efforts in preparing the book. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. The authors and publisher make no warranty of any kind, expressed or implied, with regard to these programs or to the documentation contained in these books. The authors and publisher shall not be liable in any event for incidental or consequential damages in connection with, or arising out of, the furnishing, performance, or use of these programs.