Context engineering
8 Eccezioni e Debugging
Obiettivi didattici:
Riconoscere errori comuni in Python.
Gestire eccezioni con try, except e finally.
Usare strumenti di debugging per identificare problemi.
Applicare le eccezioni per validare input numerici.
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
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!")
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.
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 True continua fino a input corretto.
try: prova a convertire l’input in int.
except ValueError: intercetta input non numerico e mostra messaggio di errore.
return esce 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
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ù clausole except distinte.
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.
Modificare la funzione leggi_intero per leggere anche numeri positivi > 0 e stampare un messaggio d’errore personalizzato.
Creare una funzione leggi_float che gestisce input decimali.
Usare il debugger per osservare il flusso quando l’utente inserisce valori non validi.
Commenti
Posta un commento