L'istruzione try except in Python

L'istruzione try except del linguaggio python mi permette di intercettare uno o più errori nell'esecuzione di un blocco di istruzioni tramite la gestione delle eccezioni.

try:
blocco di istruzioni
except errore1:
istruzione1

La struttura try esegue il blocco di istruzioni indentato.

  • Se non ci sono errori lo esegue. Poi salta alla prima istruzione successiva alla struttura.
  • Se si presenta un errore, l'istruzione try verifica se il codice di errore corrisponde a quello documentato dopo una clausola except.
    • Se corrisponde esegue la relativa istruzione indentata. Poi salta alla prima istruzione successiva alla struttura try except, senza bloccare l'esecuzione del programma.
    • Se non corrisponde, l'interprete python va in errore e blocca l'esecuzione del programma

A cosa serve try except? Evita che il programma vada in errore. Se si verifica un imprevisto, la struttura try except permette al programmatore di rilevarla e correggerla automaticamente, senza bloccare l'esecuzione del programma.

Un esempio pratico

Questo script divide due valori.

Tuttavia, il divisore (b) è uguale a zero.

  1. a=10
  2. b=0
  3. try:
  4. print(a/b)
  5. except ZeroDivisionError:
  6. print("attenzione, divisione per zero")

In condizioni normali questo tentativo restituirebbe un messaggio di errore.

print(a/b)
ZeroDivisionError: division by zero

In questo caso, invece, l'istruzione try verifica se il codice di errore è documentato nella clausola except alla riga 5.

Lo trova ed esegue la linea 6

attenzione, divisione per zero

Lo script prosegue l'esecuzione senza arrestarsi.

Come gestire più eccezioni

Nella struttura tre except posso inserire anche diverse clausole except.

In questo modo posso gestire più eccezioni ( handled exception ) diverse tra loro.

try:
blocco di istruzioni
except errore1:
istruzione1
except errore2:
istruzione2

L'istruzione try verifica le clausole in sequenza, dalla prima all'ultima.

Se trova il codice indentato, esegue il relativo blocco di istruzioni indentato.

Un esempio pratico

Ecco un esempio pratico di gestione di due eccezioni.

  1. try:
  2. print(a/b)
  3. except ZeroDivisionError:
  4. print("attenzione, divisione per zero")
  5. except IndexError:
  6. print("attenzione, errore nell'indice")

Come intercettare tutti gli errori

Per intercettare tutte le eccezioni, basta non inserire nessun codice di errore dopo una clausola except.

Questo tipo di eccezione è detta except default e va messa dopo l'ultima clausola except.

try:
blocco di istruzioni
except errore1:
istruzione1
except errore2:
istruzione2
except:
istruzione3

In caso di errore l'interprete verifica se il codice è uguale all'errore1 o all'errore2.

Se il codice è diverse, esegue il blocco indentato dentro la clausola except di default, ossia l'istruzione 3.

Un esempio pratico

Questo codice gestisce due eccezioni.

  1. try:
  2. print(a/b)
  3. except ZeroDivisionError:
  4. print("attenzione, divisione per zero")
  5. except IndexError:
  6. print("attenzione, errore nell'indice")
  7. except:
  8. print("si è verificato un altro errore")

Se le due eccezioni non corrispondono all'errore, l'interprete python stampa sullo schermo il messaggio “si è verificato un altro errore”.

Come intercettare un errore senza fare nulla

Per intercettare un errore senza fare nulla, posso usare l'istruzione pass.

try:
blocco di istruzioni
except errore1:
pass

Dopo la clausola except è obbligatorio digitare qualcosa nel codice indentato.

In caso contrario l'interprete andrebbe in errore.

L'istruzione pass occupa soltanto il posto. Non fa assolutamente nulla.

La clausola finally

La clausola finally è una clausola facoltativa della struttura try except.

Viene eseguita al termine delle altre. In questo caso finally significa "alla fine".

try:
...
except:
...
finally:
...

Il blocco di istruzioni dentro finally viene eseguito in ogni caso, anche se non sorge nessuna eccezione.

Un esempio pratico

In questo script uso la clausola finally nella struttura try except.

  1. try:
  2. print("1")
  3. except:
  4. print("2")
  5. finally:
  6. print("3")

L'output dello script è il seguente:

1
3

La clausola else

La clausola else è un'altra clausola facoltativa della struttura try except.

E' eseguita soltanto se non sorge nessuna eccezione.

try:
...
except:
...
else:
...

Se invece si solleva un'eccezione, la clausola else non è eseguita dall'interprete python.

Un esempio pratico

In questo script utilizzo la clausola else.

  1. try:
  2. if x>0: print("numero positivo")
  3. except:
  4. print("errore: il numero è una stringa")
  5. else:
  6. print("calcolo eseguito correttamente")

Se x è un numero (es. x=5) lo script gira correttamente e non si verifica nessuna eccezione.

Quindi l'output dello script è il seguente:

numero positivo
calcolo eseguito correttamente

Se invece x è una stringa ( es. x="5" ) lo script solleva un'eccezione.

L'output dello script è

errore: il numero è una stringa

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Python ( eccezioni )

  1. Come gestire le eccezioni

Le istruzioni

  1. try except
  2. pass
  3. raise
  4. sys.exc_info()