8 Eccezioni e Debugging
Obiettivi didattici:
-
Riconoscere errori comuni in Python.
-
Gestire eccezioni con
try,exceptefinally. -
Usare strumenti di debugging per identificare problemi.
-
Applicare le eccezioni per validare input numerici.
1. Errori comuni in Python
Python distingue diversi tipi di errori:
-
SyntaxError – errori di sintassi.
# Esempio
print("Ciao" # manca parentesi chiusa → SyntaxError
-
NameError – variabile non definita.
print(x) # NameError: x non definita
-
TypeError – tipo di dato non compatibile.
a = "5"
b = 3
print(a + b) # TypeError: non puoi sommare str + int
-
ValueError – tipo corretto, valore non valido.
int("abc") # ValueError
-
IndexError / KeyError – accesso a indici o chiavi inesistenti.
lst = [1,2,3]
print(lst[5]) # IndexError
d = {"a": 1}
print(d["b"]) # KeyError
2. Gestione delle eccezioni
Si usa il blocco try/except/finally:
try:
# codice potenzialmente pericoloso
x = int(input("Inserisci un numero: "))
except ValueError:
print("Hai inserito un valore non numerico!")
finally:
print("Esecuzione terminata.")
Spiegazione:
-
try: blocco da testare. -
except: intercetta eccezioni specifiche. -
finally: eseguito sempre, indipendentemente dall’errore.
Si possono gestire più eccezioni:
try:
y = 10 / int(input("Dividendo: "))
except ValueError:
print("Inserisci un numero intero valido!")
except ZeroDivisionError:
print("Divisione per zero non permessa!")
3. Uso del debugger
-
Permette di eseguire il codice passo-passo, osservare variabili e individuare errori logici.
-
In Python, si può usare il modulo pdb:
import pdb
x = int(input("Inserisci un numero: "))
pdb.set_trace() # punto di interruzione
y = 10 / x
print(y)
Comandi principali di pdb:
-
n→ esegui la riga successiva -
c→ continua fino al prossimo breakpoint -
p variabile→ stampa il valore -
q→ esci dal debugger
In molti IDE (PyCharm, VSCode), il debugger è integrato e permette breakpoint visuali.
4. Esercizio pratico: Validazione input numerici
Obiettivo: chiedere un numero all’utente e gestire input non validi.
def leggi_intero(prompt):
while True:
try:
n = int(input(prompt))
return n
except ValueError:
print("Errore: inserisci un numero intero valido!")
numero = leggi_intero("Inserisci un numero intero: ")
print(f"Hai inserito: {numero}")
Spiegazione passo-passo:
-
Ciclo
while Truecontinua fino a input corretto. -
try: prova a convertire l’input inint. -
except ValueError: intercetta input non numerico e mostra messaggio di errore. -
returnesce dalla funzione quando l’input è corretto.
Esempio di esecuzione:
Inserisci un numero intero: abc
Errore: inserisci un numero intero valido!
Inserisci un numero intero: 42
Hai inserito: 42
5. Test rapido
-
Quale errore genera
int("abc")?
Risposta: ValueError -
Cosa fa il blocco
finally?
Risposta: viene eseguito sempre, anche se si verifica un’eccezione. -
Come si gestiscono più eccezioni diverse?
Risposta: con più clausoleexceptdistinte. -
Come si inserisce un breakpoint con pdb?
Risposta:pdb.set_trace() -
Perché usare eccezioni per validare input?
Risposta: per evitare crash e guidare l’utente a fornire dati corretti.
6. Attività pratica
-
Modificare la funzione
leggi_interoper leggere anche numeri positivi > 0 e stampare un messaggio d’errore personalizzato. -
Creare una funzione
leggi_floatche gestisce input decimali. -
Usare il debugger per osservare il flusso quando l’utente inserisce valori non validi.
.jpeg)
Nessun commento:
Posta un commento