I si estem llegint un fitxer i volem tancar-lo tant si s'ha produït una
excepció com si no? En aquests casos podem fer servir el bloc
finally
. Notem que podem fer servir la clàusula
except
amb finally
dins el
mateix bloc try
incloent un dins de l'altre.
Example 13.3. Ús de Finally
#!/usr/bin/python # Filename: finally.py import time try: f = file('poem.txt') while True: # la nostra manera habitual de llegir un fitxer line = f.readline() if len(line) == 0: break time.sleep(2) print line, finally: f.close() print 'Cleaning up...closed the file'
$ python finally.py Programming is fun When the work is done Cleaning up...closed the file Traceback (most recent call last): File "finally.py", line 12, in ? time.sleep(2) KeyboardInterrupt
Llegim el fitxer de la manera habitual, però he introduït
arbitràriament un temps d'espera de 2 segons abans d'escriure
cada línia amb el mètode time.sleep
.
La idea és que el programa s'executi prou lentament (Python és
naturalment molt ràpid). Mentre el programa està encara
funcionant, premem
Ctrl-c per
a interrompre l'execució.
Observem que es llença una excepció
KeyboardInterrupt
i que el programa surt.
Però, abans de sortir, s'executa la clàusula
finally
que tanca el fitxer.