Articles

Gestione delle eccezioni in Python usando try, except e finally statement

Eccezioni in Python

Python ha molte eccezioni incorporate che vengono sollevate quando il vostro programma incontra un errore (qualcosa nel programma va storto).

Quando queste eccezioni si verificano, l’interprete Python ferma il processo corrente e lo passa al processo chiamante finché non viene gestito. Se non viene gestita, il programma va in crash.

Per esempio, consideriamo un programma dove abbiamo una funzione A che chiama la funzione B, che a sua volta chiama la funzione C. Se si verifica un’eccezione nella funzione C ma non viene gestita in C, l’eccezione passa a B e poi a A.

Catching Exceptions in Python

In Python, le eccezioni possono essere gestite usando una dichiarazione try.

L’operazione critica che può sollevare un’eccezione è posta all’interno della clausola try. Il codice che gestisce le eccezioni è scritto nella clausola except.

Possiamo quindi scegliere quali operazioni eseguire una volta catturata l’eccezione. Ecco un semplice esempio.

Output

In questo programma, scorriamo i valori della lista randomList. Come già detto, la parte che può causare un’eccezione è posta all’interno del blocco try.

Se non si verifica alcuna eccezione, il blocco except viene saltato e il flusso normale continua (per l’ultimo valore). Ma se si verifica un’eccezione, questa viene catturata dal blocco except (primo e secondo valore).

Qui, stampiamo il nome dell’eccezione usando la funzione exc_info() all’interno del modulo sys. Possiamo vedere che a causa ValueError e 0 causa ZeroDivisionError.

Siccome ogni eccezione in Python eredita dalla classe base Exception, possiamo anche eseguire il suddetto compito nel modo seguente:

Questo programma ha lo stesso risultato del programma precedente.

Catturare eccezioni specifiche in Python

Nell’esempio precedente, non abbiamo menzionato alcuna eccezione specifica nella clausola except.

Questa non è una buona pratica di programmazione perché catturerà tutte le eccezioni e gestirà ogni caso allo stesso modo. Possiamo specificare quali eccezioni una clausola except dovrebbe catturare.

Una clausola try può avere qualsiasi numero di clausole except per gestire diverse eccezioni, tuttavia, solo una sarà eseguita nel caso in cui si verifichi un’eccezione.

Possiamo usare una tupla di valori per specificare più eccezioni in una clausola except. Ecco uno pseudo-codice di esempio.

try: # do something passexcept ValueError: # handle ValueError exception passexcept (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError passexcept: # handle all other exceptions pass

Risollevare eccezioni in Python

Nella programmazione Python, le eccezioni sono sollevate quando si verificano errori in fase di esecuzione. Possiamo anche sollevare manualmente delle eccezioni usando la parola chiave raise.

Possiamo opzionalmente passare dei valori all’eccezione per chiarire perché quell’eccezione è stata sollevata.

Python try con clausola else

In alcune situazioni, si potrebbe voler eseguire un certo blocco di codice se il blocco di codice all’interno try funziona senza alcun errore. Per questi casi, potete usare la parola chiave opzionale else con l’istruzione try.

Nota: Le eccezioni nella clausola else non sono gestite dalle clausole except precedenti.

Guardiamo un esempio:

Output

Se passiamo un numero dispari:

Enter a number: 1Not an even number!

Se passiamo un numero pari, il reciproco viene calcolato e visualizzato.

Enter a number: 40.25

Tuttavia, se passiamo 0, otteniamo ZeroDivisionError poiché il blocco di codice dentro else non è gestito dal precedente except.

Python try…finally

L’istruzione try in Python può avere una clausola opzionale finally. Questa clausola viene eseguita a prescindere, ed è generalmente usata per rilasciare risorse esterne.

Per esempio, potremmo essere connessi ad un centro dati remoto attraverso la rete o lavorare con un file o un’interfaccia grafica utente (GUI).

In tutte queste circostanze, dobbiamo pulire la risorsa prima che il programma si fermi, sia che sia stato eseguito con successo o meno. Queste azioni (chiusura di un file, GUI o disconnessione dalla rete) vengono eseguite nella clausola finally per garantire l’esecuzione.

Ecco un esempio di operazioni su file per illustrare questo.

try: f = open("test.txt",encoding = 'utf-8') # perform file operationsfinally: f.close()

Questo tipo di costrutto assicura che il file venga chiuso anche se si verifica un’eccezione durante l’esecuzione del programma.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *