4.1 Gestione di più eccezioni
Python ti permette di gestire più eccezioni utilizzando più blocchi except
o un unico blocco except
con una tupla di eccezioni. Vediamo entrambi gli approcci.
Più blocchi except
Puoi usare più blocchi except
per gestire diversi tipi di eccezioni in modi differenti.
try:
# Codice che potrebbe generare un'eccezione
result = int("abc")
except ValueError:
print("Errore: valore non corretto.")
except ZeroDivisionError:
print("Errore: divisione per zero.")
Un blocco except
con una tupla di eccezioni
Puoi gestire più eccezioni in un unico blocco except
passandole come una tupla.
try:
# Codice che potrebbe generare un'eccezione
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Si è verificato un errore: {e}")
Utilizzo di except
NameError
as
var
Quando gestisci le eccezioni puoi usare la sintassi except
<ExceptionType>
as
<variable>
per ottenere l'oggetto eccezione. Questo ti consente di accedere alle informazioni sull'eccezione, come il messaggio di errore e altri attributi.
try:
# Codice che potrebbe generare NameError
print(undeclared_variable)
except NameError as e:
print(f"Si è verificato un errore: {e}")
print(f"Tipo di errore: {type(e)}")
4.2 Ambito della variabile di errore
La variabile in cui viene memorizzata l'eccezione (e
nell'esempio precedente) è accessibile solo all'interno del suo blocco except
. Al di fuori di questo blocco la variabile non è accessibile.
try:
# Codice che potrebbe generare NameError
print(undeclared_variable)
except NameError as e:
print(f"Si è verificato un errore: {e}")
print(f"Tipo di errore: {type(e)}")
# Qui e non è più disponibile, e la prossima riga genererà NameError
# print(e) # NameError: name 'e' is not defined
Se vuoi fare qualcosa di importante con l'eccezione al di fuori del suo blocco, allora devi memorizzarla in una variabile separata. Esempio:
exception = None
try:
# Codice che potrebbe generare un'eccezione
result = int("abc")
except ValueError as e:
exception = e
print("Errore: valore non corretto.")
except ZeroDivisionError as e:
exception = e
print("Errore: divisione per zero.")
print(exception)
Nota che la variabile exception
conserva l'ultima eccezione generata, il che può essere utile per ulteriori elaborazioni al di fuori del blocco try
.
4.3 Cosa c'è di utile nell'errore
L'oggetto eccezione contiene informazioni sull'errore. A seconda del tipo di eccezione, l'oggetto può contenere diversi attributi.
Ecco alcuni attributi comuni disponibili per la maggior parte delle eccezioni:
-
args
: Una tupla contenente gli argomenti passati durante la creazione dell'eccezione. Di solito è il messaggio di errore. -
message
: Una stringa contenente il messaggio di errore (in alcune eccezioni). -
__str__
: Metodo che restituisce una rappresentazione stringa dell'eccezione. Questo metodo viene utilizzato per ottenere una rappresentazione testuale dell'errore che verrà restituita quando si utilizza la funzioneprint()
sull'oggetto eccezione.
Esempio:
try:
# Codice che potrebbe generare ValueError
result = int("abc")
except ValueError as e:
print(f"Si è verificato un errore: {e}")
print(f"Argomenti dell'errore: {e.args}")
print(f"Messaggio di errore: {str(e)}")
Esempio di gestione di più eccezioni
try:
# Codice che potrebbe generare diversi tipi di eccezioni
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Si è verificato un errore: {e}")
print(f"Tipo di errore: {type(e)}")
print(f"Argomenti dell'errore: {e.args}")
Se si verifica un ValueError
o un ZeroDivisionError
, verrà catturato dal blocco except
. Le informazioni sull'eccezione saranno accessibili tramite la variabile e
. L'output conterrà il tipo di errore e gli argomenti passati durante la creazione dell'eccezione.
GO TO FULL VERSION