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.