
L'istruzione try except in Python
Nel linguaggio Python l'istruzione composta try except ti permette di gestire le eccezioni, quegli errori che si verificano durante l'esecuzione del programma.
- try:
- #blocco di codice da provare
- except:
- #blocco di codice da eseguire se si verifica una eccezione
Python esegue il blocco di codice dopo la parola "try".
Quando si verifica un'eccezione, il programma la intercetta ed esegue il blocco dopo la clausola "except".
A cosa serve? Le eccezioni sono quegli errori che non dipendono dalla sintassi del codice. Possono verificarsi in determinati condizioni, a seconda dei dati. Ad esempio, una divisione per zero o il tentativo di aprire un file inesistente. In questi casi, l'esecuzione del programma si interrompe e il programma va in crash. Il costrutto try except ti permette di evitarlo.
Ecco un esempio pratico.
Scrivi uno script con queste istruzioni.
- x=10
- y=0
- z=x/y
- print(z)
Questo script non ha errore di sintassi.
Tuttavia, quando lo esegui il programma si interrompe, perché si verifica una divisione per zero.
Traceback (most recent call last):
File "/home/main.py", line 3, in <module>
z=x/y
ZeroDivisionError: division by zero
Per evitare questo problema puoi riscrivere lo script usando l'istruzione try except.
- try:
- x=10
- y=0
- z=x/y
- print(z)
- except ZeroDivisionError:
- print("Non è possibile dividere per zero!")
Ora quando esegui il programma, Python solleva un'eccezione ZeroDivisionError.
L'eccezione viene intercettata dal costrutto except ZeroDivisionError che visualizza un messaggio.
Non è possibile dividere per zero!
In questo caso il programma non va in crash, l'esecuzione continua regolarmente.
Nota. La clausola "except ZeroDivisionError" intercetta solo l'eccezione "ZeroDivisionError". Quindi, se durante l'esecuzione viene sollevata un'altra eccezione, il programma va comunque in crash.
Come intercettare più eccezioni?
Per intercettare più eccezioni, puoi inserire più clausole "except" nella struttura.
Se due o più clausole gestiscono la stessa eccezione, soltanto la prima viene eseguita.
Ecco un esempio pratico.
- try:
- x=10
- y=2
- z=x/y
- print(z)
- except ZeroDivisionError:
- print("Non è possibile dividere per zero!")
- except ValueError:
- print("Digita un valore numero. Ad esempio, 1, 2, 3, ecc.")
- except:
- print("Si è verificata una qualsiasi eccezione")
In questa esempio ci sono tre clausole except.
- La prima clausola "except ZeroDivisionError" viene eseguita solo se si verifica una divisione per zero.
- La seconda clausola "except ValueError" viene eseguita solo se i valori non sono numerici.
- La terza clausola "except" non specifica un tipo di eccezione. Quindi, intercetta qualsiasi eccezione si possa verificare.
Nota. Ti sconsiglio di utilizzare una clausola "except" senza specificare un tipo di eccezione, perché il programma continuerebbe ad essere eseguito ma tu non riusciresti mai a capire cosa non funziona realmente nel programma.
Volendo, puoi anche gestire più eccezioni all'interno di una stessa clausola.
In questi casi devi indicare una tupla di eccezioni dopo la clausola "except".
- try:
- x=10
- y=2
- z=x/y
- print(z)
- except (ZeroDivisionError, ValueError):
- print("Il valore è zero oppure non è un valore numerico")
Inoltre, in una struttura try except puoi utilizzare anche le clausole "else" e "finally".
Il blocco "else" viene eseguito se il codice il blocco "try" non solleva un'eccezione.
Il blocco "finally" viene sempre eseguito, indipendentemente dal fatto che si verifichi o meno una eccezione.
Ecco un esempio pratico
- try:
- x = 1 / 1
- except ZeroDivisionError:
- print("Non è possibile dividere per zero!")
- else:
- print("La divisione è avvenuta con successo!")
- finally:
- print("Fine del calcolo")
In questo esempio, il codice nel blocco "try" non solleva un'eccezione, quindi il blocco "else" viene eseguito e stampa "La divisione è avvenuta con successo!".
Infine, in qualsiasi caso Python esegue il blocco "finally" stampando sullo schermo "Fine del calcolo".
La divisione è avvenuta con successo!
Fine del calcolo
Se ora scrivi x=1/0 nella terza riga del codice, il blocco "try" solleva un'eccezione "ZeroDivisionError".
- try:
- x = 1 / 0
- except ZeroDivisionError:
- print("Non è possibile dividere per zero!")
- else:
- print("La divisione è avvenuta con successo!")
- finally:
- print("Fine del calcolo")
In questo caso il blocco "except" viene eseguito mentre il blocco "else" viene ignorato.
Infine, il blocco "finally" viene comunque eseguito.
Non è possibile dividere per zero!
Fine del calcolo
In questo modo puoi gestire varie situazioni ed eventi che possono verificarsi durante il calcolo.