Finally
Abbiamo visto nelle sezioni precedenti come eseguire diversi blocchi di codice a seconda dell’eccezione che viene lanciata a seguito di un errore. In Python esiste un’ulteriore clausola da aggiungere al costrutto try-except chiamata finally. Anche questa clausola definisce un blocco di codice specifico che verrà eseguito in tutti i casi. Cioè il blocco finally viene eseguito sia se viene terminato il blocco try senza alcuna eccezione, sia che sia avvenuta una qualsiasi eccezione (sia gestite che non gestite).
try :
blocco try
except NomeEccezione1:
blocco except
except NomeEccezione2:
...
...
finally:
blocco finally
Questo permette di poter eseguire alcune istruzioni anche nel caso avvenisse una qualche eccezione non gestita. Attenzione, che in questo caso l’esecuzione del programma si interromperebbe immediatamente dopo, riportando il messaggio di errore.
Per esempio per vedere bene il suo funzionamento aggiungiamo la clausola finally e cancelliamo la gestione della ZeroDivisionError.
a = 5
b = input("Inserisci un valore numerico: ")
try:
b = int(b)
res = a/b
print("5 / ",b," = ",res)
except ValueError:
print("Attenzione hai immesso un valore errato")
finally:
print("The show must go on!")
Questa volta eseguite il codice ed inserite il valore 0 per generare l’eccezione non gestita.
>>>
Inserisci un valore numerico: 0
The show nust go on!
Traceback (most recent call last):
File "C:/Python34/prova.py", line 5, in <module>
res = a/b
ZeroDivisionError: division by zero