Gestione degli errori
Cosa succede quando si verifica un errore?
Sezione intitolata “Cosa succede quando si verifica un errore?”Un programma può incontrare situazioni che non sa gestire: l’utente inserisce testo al posto di un numero, il codice divide per zero o apre un file inesistente.
In questi casi Python “lancia” un errore, chiamato tecnicamente eccezione. Se non lo gestisci, il programma si interrompe e mostra un messaggio.
Esempi di errori comuni:
print(10 / 0) # ZeroDivisionError: non si può dividere per zeroprint("ciao" + 5) # TypeError: non puoi sommare testo e numeroint("pippo") # ValueError: "pippo" non è un numeroprint(variabile_che_non_c_e) # NameError: variabile non definita
lista = [1, 2, 3]print(lista[10]) # IndexError: la lista non ha la posizione 10Il blocco try / except
Sezione intitolata “Il blocco try / except”Inserisci il codice che può fallire in un blocco try. Se si verifica un errore, Python passa al blocco except:
try: risultato = 10 / 0except ZeroDivisionError: print("Non puoi dividere per zero!")In altre parole: “Prova a eseguire questo codice. Se si verifica un ZeroDivisionError, invece esegui quest’altro.”
Gestire più tipi di errori
Sezione intitolata “Gestire più tipi di errori”Puoi usare più blocchi except, uno per ogni tipo di errore da gestire:
try: numero = int(input("Inserisci un numero: ")) risultato = 10 / numero print(f"10 / {numero} = {risultato}")except ValueError: print("Devi inserire un numero valido, non del testo.")except ZeroDivisionError: print("Non puoi dividere per zero.")Il blocco else: “tutto è andato bene”
Sezione intitolata “Il blocco else: “tutto è andato bene””Il blocco else viene eseguito solo se non si è verificato nessun errore:
try: numero = int(input("Inserisci un numero: ")) risultato = 10 / numeroexcept (ValueError, ZeroDivisionError) as e: print(f"Errore: {e}")else: print(f"Risultato: {risultato}") # viene eseguito solo se tutto è okIl blocco finally: “sempre, in ogni caso”
Sezione intitolata “Il blocco finally: “sempre, in ogni caso””Il blocco finally viene sempre eseguito, con o senza errori. Puoi usarlo per la “pulizia”, come chiudere un file o liberare risorse:
try: file = open("esempio.txt", "r") contenuto = file.read()except FileNotFoundError: print("File non trovato.")finally: print("Operazione completata (con o senza errori).")Leggere il messaggio di errore
Sezione intitolata “Leggere il messaggio di errore”Puoi salvare il messaggio di errore con as e stamparlo:
try: x = int("pippo")except ValueError as e: print(f"Dettaglio errore: {e}") # Dettaglio errore: invalid literal for int() with base 10: 'pippo'Gli errori più comuni
Sezione intitolata “Gli errori più comuni”| Errore | Quando succede |
|---|---|
ValueError |
Valore sbagliato per il tipo (es. int("abc")) |
TypeError |
Tipo sbagliato (es. "ciao" + 5) |
ZeroDivisionError |
Divisione per zero |
NameError |
Variabile non definita |
IndexError |
Indice fuori dalla lista |
KeyError |
Chiave non trovata nel dizionario |
FileNotFoundError |
File non trovato |
Esempio pratico: input sicuro
Sezione intitolata “Esempio pratico: input sicuro”while True: try: a = float(input("Numeratore: ")) b = float(input("Denominatore: ")) risultato = a / b except ValueError: print("Inserisci solo numeri validi.") continue except ZeroDivisionError: print("Non si può dividere per zero.") continue else: print(f"Risultato: {risultato}") break