Guida completa a Python
📘 Capitolo 8 – Gestione degli Errori (Eccezioni)
1. Cos’è un’eccezione?
Un’eccezione è un errore che si verifica durante l’esecuzione del programma, che interrompe il normale flusso del codice… a meno che tu non lo gestisca!
Esempio:
x = int("ciao") # ValueError!
2. Blocco try-except
Serve a intercettare errori e reagire in modo controllato.
try:
x = int(input("Inserisci un numero: "))
print("Hai inserito:", x)
except ValueError:
print("⚠️ Errore: devi inserire un numero valido!")
3. Gestione multipla
Puoi gestire più tipi di errore separatamente:
try:
a = int(input("Numero A: "))
b = int(input("Numero B: "))
risultato = a / b
print("Risultato:", risultato)
except ValueError:
print("⚠️ Inserisci solo numeri interi.")
except ZeroDivisionError:
print("🚫 Non puoi dividere per zero.")
4. Il blocco else
Viene eseguito solo se non ci sono errori.
try:
numero = int(input("Inserisci un numero: "))
except ValueError:
print("Errore!")
else:
print(f"Hai inserito il numero {numero}")
5. Il blocco finally
Viene eseguito sempre, con o senza errori. Utile per pulire risorse (chiudere file, disconnettersi, ecc.).
try:
f = open("esempio.txt", "r")
contenuto = f.read()
print(contenuto)
except FileNotFoundError:
print("File non trovato.")
finally:
print("Operazione completata.")
6. Creare eccezioni personalizzate
Puoi lanciare un errore con raise
:
def dividi(a, b):
if b == 0:
raise ZeroDivisionError("Non puoi dividere per zero.")
return a / b
🧪 Esercizio pratico
- Chiedere due numeri all’utente
- Eseguire la divisione
- Gestire:
- Inserimento non numerico
- Divisione per zero
- Mostrare un messaggio finale a prescindere
Soluzione in Python
print("=== Divisione con gestione degli errori ===")
try:
a = int(input("Inserisci il primo numero: "))
b = int(input("Inserisci il secondo numero: "))
risultato = a / b
except ValueError:
print("⚠️ Errore: devi inserire solo numeri interi.")
except ZeroDivisionError:
print("🚫 Errore: non puoi dividere per zero.")
else:
print(f"✅ Risultato: {a} / {b} = {risultato}")
finally:
print("✔️ Programma terminato.")
Cosa hai imparato?
- Come evitare crash quando l’utente sbaglia input
- Come gestire più eccezioni in modo separato
- Il flusso di
try
➝except
➝else
➝finally