Concatenazione delle eccezioni e rilancio
Scorri per mostrare il menu
Quando si gestiscono gli errori in Python, può capitare di trovarsi in una situazione in cui la cattura di un'eccezione porta a sollevarne un'altra diversa. In questi casi, è importante preservare il contesto dell'errore originale. Il chaining delle eccezioni in Python consente di farlo utilizzando la parola chiave from. Collegando esplicitamente le eccezioni, si forniscono traceback più dettagliati, facilitando la comprensione della sequenza di errori che ha portato a un fallimento.
Supponiamo di scrivere una funzione che elabora input da un file. Se si verifica un errore durante la lettura del file, potrebbe essere utile sollevare un'eccezione personalizzata più adatta alla logica dell'applicazione, mantenendo però le informazioni sull'errore originale. Utilizzando raise NewException() from original_exception è possibile ottenere questo risultato.
Il rilancio delle eccezioni è una tecnica correlata. Talvolta, dopo aver catturato un'eccezione, si desidera eseguire alcune operazioni di pulizia o di logging, e poi lasciare che l'eccezione si propaghi verso l'alto. È possibile farlo semplicemente utilizzando raise senza specificare un'eccezione, che rilancia l'ultima eccezione catturata. Sia il chaining che il rilancio delle eccezioni sono strumenti preziosi per scrivere codice robusto e facilmente debugabile.
12345678910111213141516# Simple exception chaining and re-raising example def divide(a, b): try: return a / b except ZeroDivisionError as err: # Chain a new exception to the original raise ValueError("Cannot divide by zero") from err try: divide(5, 0) except ValueError as e: print("Caught ValueError:") import traceback traceback.print_exc() print("\nRe-raising the exception...\n") raise
Questo codice mostra un esempio semplice di chaining e rilancio delle eccezioni in Python. La funzione divide tenta di dividere due numeri e cattura un ZeroDivisionError, collegandolo a un nuovo ValueError con un messaggio chiaro. Il blocco esterno try-except cattura il ValueError, stampa il traceback completo che mostra entrambe le eccezioni e poi rilancia l'eccezione per propagarla ulteriormente.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione