Gestione degli errori
Categorie di errori
In Python esistono diversi errori che l'interprete può generare prima o durante l'esecuzione del programma. Questa distinzione è importante perché stabilisce se il programma può "sopravvivere" durante l'esecuzione o se non parte proprio.
Errori di compilazione o Errori di sintassi
Questi errori avvengono nella fase in cui Python "legge" il codice e cerca di tradurlo in bytecode.
Supponiamo di avere il seguente codice
print("Hello")
print("World"
Se si tenta di eseguirlo l'interprete stamperà il seguente messaggio sulla console:
File "/home/main.py", line 2
print ("World"
^
SyntaxError: '(' was never closed
Il codice presenta un errore di sintassi alla riga 2 perchè manca la parentesi di chiusura.
Si può constatare che l'esecuzione non parte perché nell'output non viene riportata la parola "Hello" prodotta dalla prima istruzione.
Questo significa che prima di avviare l'esecuzione Python verifica la sintassi di tutte le istruzioni e se c'è un errore lo riporta senza far partire l'esecuzione.
Errori di Runtime o Eccezioni
Questi errori avvengono durante l'esecuzione del programma. Il codice è scritto correttamente (non è presente alcun errore di sintassi), ma succede qualcosa di imprevisto durante l'esecuzione.
Supponiamo di avere il seguente codice
a = 10
b = 0
print(f"Variabile a = {a}")
print(f"Variabile b = {b}")
print(f"Il risultato della divisione di a per b è {a/b}")
Se si esegue il programma l'output sarà il seguente:
Variabile a = 10
Variabile b = 0
Traceback (most recent call last):
File "/home/main.py", line 5, in
print(f"Il risultato della divisione di a per b è {a/b}")
~^~
ZeroDivisionError: division by zero
Come si può vedere dall'output le prime 4 righe vengono eseguite correttamente mentre alla riga 5 viene generato un errore ZeroDivisionError.
A differenza degli errori di sintassi, gli errori di runtime sono intercettabili dall'interprete e possono essere gestiti per modificare il comportamento del programma.