martedì 21 ottobre 2025

Corso di Python: 8 – Eccezioni e Debugging

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.


1. Errori comuni in Python

Python distingue diversi tipi di errori:

  1. SyntaxError – errori di sintassi.

# Esempio
print("Ciao"  # manca parentesi chiusa → SyntaxError
  1. NameError – variabile non definita.

print(x)  # NameError: x non definita
  1. TypeError – tipo di dato non compatibile.

a = "5"
b = 3
print(a + b)  # TypeError: non puoi sommare str + int
  1. ValueError – tipo corretto, valore non valido.

int("abc")  # ValueError
  1. 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:

  1. Ciclo while True continua fino a input corretto.

  2. try: prova a convertire l’input in int.

  3. except ValueError: intercetta input non numerico e mostra messaggio di errore.

  4. 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

5. Test rapido

  1. Quale errore genera int("abc")?
    Risposta: ValueError

  2. Cosa fa il blocco finally?
    Risposta: viene eseguito sempre, anche se si verifica un’eccezione.

  3. Come si gestiscono più eccezioni diverse?
    Risposta: con più clausole except distinte.

  4. Come si inserisce un breakpoint con pdb?
    Risposta: pdb.set_trace()

  5. 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_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.


Nessun commento:

Posta un commento

Corso Fondamenti di Informatica e Reti: 6 Reti di computer e Internet

Reti di computer e Internet Introduzione Prova a pensare alla vita quotidiana senza reti informatiche: niente messaggi WhatsApp, niente m...