Impara a prevedere e gestire gli imprevisti: try/except per programmi robusti che non si bloccano.
Quando Python incontra un problema durante l'esecuzione (dividere per zero, aprire un file inesistente, convertire testo in numero non valido), interrompe il programma e mostra un messaggio di errore chiamato "eccezione". Senza gestione, il programma si blocca lì.
numero = int(input("Inserisci un numero: ")) print(10 / numero) # Se l'utente scrive 0, il programma si blocca con ZeroDivisionError
Con try/except diciamo a Python: "prova a eseguire questo codice, ma se succede un errore, non bloccarti: fai invece quest'altra cosa".
try: numero = int(input("Inserisci un numero: ")) print(10 / numero) except ZeroDivisionError: print("Non puoi dividere per zero!") except ValueError: print("Devi inserire un numero valido!")
| Eccezione | Quando si verifica |
|---|---|
| ZeroDivisionError | Quando si divide un numero per zero |
| ValueError | Quando un valore ha il tipo giusto ma non è utilizzabile (es. int("ciao")) |
| TypeError | Quando si combinano tipi di dato incompatibili (es. "5" + 5) |
| FileNotFoundError | Quando si tenta di aprire in lettura un file che non esiste |
| KeyError | Quando si cerca in un dizionario una chiave che non esiste |
| IndexError | Quando si accede a un indice di lista che non esiste |
È buona pratica specificare il tipo di eccezione da gestire, invece di catturare "tutto" genericamente: rende il codice più chiaro su cosa ci si aspetta possa andare storto.
Il blocco else si esegue solo se il codice nel try non ha generato errori: utile per separare la logica di successo da quella di gestione errori.
Il blocco finally si esegue sempre, che ci sia stato un errore o meno: perfetto per operazioni di pulizia, come chiudere una connessione o un file.
Puoi anche generare tu stesso un'eccezione con raise, per segnalare una situazione anomala nel tuo stesso codice.
Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato di questa guida al termine.
Esempio per il punto 1
try: a = 10 b = 0 print(a / b) except ZeroDivisionError: print("Non puoi dividere per zero!")
Esempio per il punto 2
try: numero = int(input("Numero: ")) print(10 / numero) except ZeroDivisionError: print("Errore: divisione per zero") except ValueError: print("Errore: devi inserire un numero")
Esempio per il punto 3
try: numero = 5 risultato = 10 / numero except ZeroDivisionError: print("Errore") else: print(f"Risultato: {risultato}") # solo se non ci sono stati errori
Esempio per il punto 4
try: risultato = 10 / 5 except ZeroDivisionError: print("Errore") finally: print("Operazione conclusa") # sempre, con o senza errore
Tocca ogni termine per vederne la definizione.
Scrivi uno script che chiede due numeri e li divide, gestendo con try/except sia ZeroDivisionError che ValueError (se l'utente inserisce testo invece di numeri).
Crea un dizionario con 3 chiavi. Scrivi uno script che prova ad accedere a una chiave scelta dall'utente, gestendo con try/except il caso in cui la chiave non esista (KeyError).
Questo codice "funziona" ma nasconde un problema: try: risultato = 10 / 0 except: pass. Spiega perché usare un except vuoto è una cattiva pratica e come lo miglioreresti.
Completa tutti i 5 passaggi della checklist per sbloccare il tuo attestato in PDF.