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