Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Migliori Pratiche per la Gestione delle Eccezioni | Padronanza della Gestione degli Errori in Python
Quizzes & Challenges
Quizzes
Challenges
/
Programmazione Strutturale in Python

bookMigliori Pratiche per la Gestione delle Eccezioni

La parola chiave 'as' nelle eccezioni

La parola chiave as viene utilizzata nella gestione delle eccezioni per catturare un'istanza dell'eccezione. Questo è utile per ottenere maggiori dettagli sull'errore e può essere particolarmente vantaggioso per la registrazione o per rispondere all'errore in modo più informato.

1234
try: x = 10 / 0 except ZeroDivisionError as e: print(f"Caught an exception: {e}")
copy

Che cos'è il Traceback?

Un traceback fornisce dettagli sul percorso effettivo seguito dall'esecuzione di un programma fino al punto in cui si è verificata l'eccezione. Include le chiamate di funzione effettuate nel programma e i numeri di riga nei file di codice in cui queste chiamate sono state eseguite. I traceback sono fondamentali per il debug degli errori sia in fase di sviluppo che in ambienti di produzione.

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    main()
  File "example.py", line 4, in main
    divide_by_zero()
  File "example.py", line 2, in divide_by_zero
    return 1 / 0
ZeroDivisionError: division by zero

Buone pratiche nella gestione delle eccezioni

1. Cattura di eccezioni troppo generiche

# Bad Practice
try:
    process_data(data)
except Exception:
    pass

# Best Practice
try:
    process_data(data)
except SpecificError:
    handle_error()

Catturare eccezioni troppo generiche può oscurare la causa principale degli errori, rendendo difficile il debug e potenzialmente mascherando altri problemi che richiedono una gestione specifica, riducendo così l'affidabilità e la manutenibilità del software.

2. Cattura e rilancio dell'eccezione

Se è necessario eseguire un'operazione quando si verifica un'eccezione ma si desidera comunque che l'eccezione venga propagata.

# Best Practice
try:
    do_something()
except Exception as e:
    log_error(e)
    raise  # Better: Re-raises the current exception

Nota

Le funzioni log_error(e) e print(e) mostrano entrambe l'intero traceback di un errore, il che può essere utile durante lo sviluppo. Tuttavia, in un ambiente di produzione, mostrare i traceback completi può esporre l'applicazione a vulnerabilità, poiché spesso contengono informazioni sensibili.

3. Prestazioni delle eccezioni

Evitare l'uso eccessivo dei blocchi try-except nel codice, poiché un uso eccessivo può rallentare il programma. Implementarli solo quando hanno uno scopo funzionale. L'utilizzo di un'istruzione if è generalmente più veloce ed efficiente.

Compito

Swipe to start coding

Rifattorizza il seguente script Python per migliorare la gestione delle eccezioni secondo le best practice discusse.

def process_data(data):
    try:
        return data[0] / data[-1]
    except:
        print("An error occurred.")

# Example usage
result = process_data([1, 2, 0])
  • Il codice include un controllo per assicurarsi che la lista data non sia vuota prima di procedere, utilizzando un ValueError.
  • Il codice rifattorizzato intercetta eccezioni specifiche (ZeroDivisionError, TypeError, IndexError) invece di utilizzare una clausola generica except.
  • Ogni tipo di eccezione ha un messaggio di errore personalizzato che fornisce maggiori dettagli su cosa è andato storto.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 5
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

close

bookMigliori Pratiche per la Gestione delle Eccezioni

Scorri per mostrare il menu

La parola chiave 'as' nelle eccezioni

La parola chiave as viene utilizzata nella gestione delle eccezioni per catturare un'istanza dell'eccezione. Questo è utile per ottenere maggiori dettagli sull'errore e può essere particolarmente vantaggioso per la registrazione o per rispondere all'errore in modo più informato.

1234
try: x = 10 / 0 except ZeroDivisionError as e: print(f"Caught an exception: {e}")
copy

Che cos'è il Traceback?

Un traceback fornisce dettagli sul percorso effettivo seguito dall'esecuzione di un programma fino al punto in cui si è verificata l'eccezione. Include le chiamate di funzione effettuate nel programma e i numeri di riga nei file di codice in cui queste chiamate sono state eseguite. I traceback sono fondamentali per il debug degli errori sia in fase di sviluppo che in ambienti di produzione.

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    main()
  File "example.py", line 4, in main
    divide_by_zero()
  File "example.py", line 2, in divide_by_zero
    return 1 / 0
ZeroDivisionError: division by zero

Buone pratiche nella gestione delle eccezioni

1. Cattura di eccezioni troppo generiche

# Bad Practice
try:
    process_data(data)
except Exception:
    pass

# Best Practice
try:
    process_data(data)
except SpecificError:
    handle_error()

Catturare eccezioni troppo generiche può oscurare la causa principale degli errori, rendendo difficile il debug e potenzialmente mascherando altri problemi che richiedono una gestione specifica, riducendo così l'affidabilità e la manutenibilità del software.

2. Cattura e rilancio dell'eccezione

Se è necessario eseguire un'operazione quando si verifica un'eccezione ma si desidera comunque che l'eccezione venga propagata.

# Best Practice
try:
    do_something()
except Exception as e:
    log_error(e)
    raise  # Better: Re-raises the current exception

Nota

Le funzioni log_error(e) e print(e) mostrano entrambe l'intero traceback di un errore, il che può essere utile durante lo sviluppo. Tuttavia, in un ambiente di produzione, mostrare i traceback completi può esporre l'applicazione a vulnerabilità, poiché spesso contengono informazioni sensibili.

3. Prestazioni delle eccezioni

Evitare l'uso eccessivo dei blocchi try-except nel codice, poiché un uso eccessivo può rallentare il programma. Implementarli solo quando hanno uno scopo funzionale. L'utilizzo di un'istruzione if è generalmente più veloce ed efficiente.

Compito

Swipe to start coding

Rifattorizza il seguente script Python per migliorare la gestione delle eccezioni secondo le best practice discusse.

def process_data(data):
    try:
        return data[0] / data[-1]
    except:
        print("An error occurred.")

# Example usage
result = process_data([1, 2, 0])
  • Il codice include un controllo per assicurarsi che la lista data non sia vuota prima di procedere, utilizzando un ValueError.
  • Il codice rifattorizzato intercetta eccezioni specifiche (ZeroDivisionError, TypeError, IndexError) invece di utilizzare una clausola generica except.
  • Ogni tipo di eccezione ha un messaggio di errore personalizzato che fornisce maggiori dettagli su cosa è andato storto.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 5
single

single

some-alt