【Introduzione alla gestione delle eccezioni in Python】 Guida dettagliata dalle basi alle migliori pratiche

1. Cos’è un’eccezione in Python?

Un’eccezione in Python è un tipo di errore che si verifica durante l’esecuzione del programma. Normalmente, un programma viene eseguito in modo sequenziale dall’alto verso il basso, ma se si verifica un errore in determinate condizioni, l’esecuzione viene interrotta e viene sollevata un’eccezione.
Ad esempio, tentare di dividere per zero genera un ZeroDivisionError, e accedere a un indice che non esiste in una lista solleva un IndexError.

1.1 Tipi comuni di eccezioni

Python dispone di molte eccezioni integrate. Ecco alcuni esempi comuni:

  • ValueError : sollevata quando una funzione riceve un argomento del tipo corretto ma con un valore inappropriato.
  • TypeError : sollevata quando un’operazione o una funzione viene applicata a un oggetto di tipo inappropriato.
  • IndexError : sollevata quando si tenta di accedere a un indice fuori dall’intervallo in una sequenza (ad esempio, una lista).
  • ZeroDivisionError : sollevata quando si tenta di dividere per zero.

Queste eccezioni forniscono informazioni diagnostiche utili quando si verificano errori imprevisti durante l’esecuzione del programma.

Ad

2. Gestione di base delle eccezioni con try e except

Python consente la gestione delle eccezioni usando try e except. Questo impedisce al programma di arrestarsi a causa di un errore, consentendogli di continuare a funzionare anche dopo che è stata incontrata un’eccezione.

2.1 Sintassi di base

Il blocco try contiene il codice che può generare un errore, mentre il blocco except definisce come gestire l’errore se si verifica.

try:
    result = 10 / 0
except ZeroDivisionError:
    print("You cannot divide by zero.")

In questo esempio, se si verifica un ZeroDivisionError, il blocco except viene eseguito e stampa “You cannot divide by zero.”

2.2 Gestione di più eccezioni

Se è necessario gestire diversi tipi di eccezioni separatamente, è possibile utilizzare più blocchi except.
Ad esempio, è possibile gestire NameError e TypeError in modo diverso:

try:
    print(a)
except NameError:
    print("Variable 'a' is not defined.")
except TypeError:
    print("An invalid type was used.")

In questo codice, poiché a non è definito, si verifica un NameError e viene visualizzato il messaggio corrispondente.

Ad
侍エンジニア塾

3. Gestione di più eccezioni in un unico blocco except

Se il tuo programma può incontrare più tipi di eccezioni, puoi gestirle insieme in un unico blocco except.

3.1 Uso di una tupla per gestire più eccezioni

È possibile specificare più tipi di eccezione in un unico blocco except usando una tupla:

try:
    num = int(input("Enter a number: "))
    result = 10 / num
except (ValueError, ZeroDivisionError):
    print("Invalid input or attempt to divide by zero.")

In questo esempio, se l’utente inserisce un valore non valido o tenta di dividere per zero, il programma gestisce entrambi i casi insieme e stampa “Invalid input or attempt to divide by zero.”

3.2 Uso di classi genitore per gestire più eccezioni

La classe Exception è la classe genitore della maggior parte delle eccezioni integrate.
È possibile catturare tutte le eccezioni usando questa classe, ma va usata con cautela poiché cattura un’ampia gamma di errori.

try:
    # Code that may raise an error
except Exception as e:
    print("An error occurred:", e)

Questo metodo cattura qualsiasi eccezione e stampa un messaggio. Tuttavia, è consigliabile gestire eccezioni specifiche ogni volta che è possibile per una gestione degli errori più efficace.

Ad

4. Sollevare eccezioni con raise

A volte può essere necessario sollevare manualmente un’eccezione se determinate condizioni non sono soddisfatte.
Ciò può essere fatto usando l’istruzione raise.

4.1 Come usare raise

Il seguente esempio solleva un ValueError se viene passato un valore negativo:

def check_value(value):
    if value < 0:
        raise ValueError("Negative values are not allowed.")
    return value

try:
    result = check_value(-1)
except ValueError as e:
    print(e)

In questo esempio, poiché a check_value viene passato -1, viene sollevato un ValueError, visualizzando il messaggio: “Negative values are not allowed.”

4.2 Uso avanzato di raise

L’istruzione raise può anche essere usata per definire classi di eccezione personalizzate.
Creando eccezioni personalizzate e sollevandole in condizioni specifiche, è possibile rendere la gestione degli errori più flessibile.

Ad
年収訴求

5. Recupero delle informazioni sull’eccezione

Quando si verifica un’eccezione, recuperare informazioni dettagliate può aiutare a diagnosticare e correggere i problemi.
Usare la clausola as nel blocco except consente di catturare l’oggetto eccezione.

5.1 Uso della clausola as

Il seguente esempio cattura l’oggetto eccezione come e e ne visualizza il messaggio:

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print("An error occurred:", e)

Se si verifica un ZeroDivisionError, questo codice stampa:
“Si è verificato un errore: divisione per zero”
L’oggetto eccezione contiene dettagli come il tipo di eccezione e il messaggio di errore.

5.2 Utilizzo degli oggetti eccezione

Gli oggetti eccezione non sono utili solo per visualizzare i messaggi di errore, ma anche per registrare gli errori e implementare una gestione aggiuntiva per errori specifici.
Ad esempio, è possibile scrivere i messaggi di errore in un file di log per facilitare il debug successivo.

Ad

6. Buone pratiche per la gestione delle eccezioni

Una gestione efficace delle eccezioni migliora la robustezza e l’affidabilità del programma.
Ecco alcune buone pratiche per gestire le eccezioni in Python.

6.1 Catturare eccezioni specifiche

Quando possibile, cattura eccezioni specifiche invece di usare un gestore generico Exception.
Catturare eccezioni come ValueError o TypeError garantisce una gestione degli errori più chiara e intenzionale.

6.2 Registrare le eccezioni

Registrare i messaggi di errore facilita l’identificazione dei problemi in seguito.
In applicazioni su larga scala, mantenere un registro delle eccezioni è fondamentale per il debug e la manutenzione.

6.3 Implementare una degradazione graduale

Assicurati che le eccezioni non causino il crash dell’intero programma.
Visualizzando messaggi di errore user‑friendly o fornendo azioni alternative, è possibile migliorare l’affidabilità del programma.

6.4 Evitare di inghiottire le eccezioni

Evita di catturare eccezioni senza fare nulla.
Ciò rende difficile il debug e può portare a comportamenti inattesi.
Al minimo, registra i messaggi di errore o intraprendi l’azione appropriata.

6.5 Usare il blocco finally

Il blocco finally viene eseguito indipendentemente dal verificarsi di un’eccezione.
È utile per chiudere file, rilasciare risorse o eseguire le operazioni di pulizia necessarie.

try:
    file = open("example.txt", "r")
    # Read the file
except FileNotFoundError:
    print("File not found.")
finally:
    file.close()

In questo esempio, anche se l’apertura del file fallisce, il blocco finally garantisce che il file venga chiuso correttamente.

Ad

7. Riepilogo

La gestione delle eccezioni in Python è essenziale per garantire l’affidabilità del programma e gestire gli errori in modo efficace.
Usando try e except per catturare gli errori e sollevando eccezioni personalizzate con raise, è possibile migliorare la flessibilità e la manutenibilità del codice.

  • Abbiamo imparato cosa sono le eccezioni e abbiamo esplorato i tipi comuni di eccezioni.
  • Abbiamo trattato come gestire le eccezioni usando try e except.
  • Abbiamo esaminato la gestione di più eccezioni in un unico blocco except.
  • Abbiamo imparato come sollevare eccezioni usando l’istruzione raise.
  • Abbiamo discusso del recupero degli oggetti eccezione per informazioni di errore dettagliate.
  • Infine, abbiamo esplorato le migliori pratiche per una gestione efficace degli errori.

La gestione delle eccezioni è una tecnica cruciale per garantire l’affidabilità del software.
Applicando queste tecniche, è possibile sviluppare applicazioni Python robuste e user‑friendly.

Ad
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール