Gestione degli errori in Python
In questo articolo spiegheremo la gestione degli errori in Python.
YouTube Video
Gestione degli errori in Python
La gestione degli errori in Python viene effettuata principalmente utilizzando le parole chiave try
, except
, else
e finally
. Utilizzando queste strutture è possibile rispondere in modo appropriato quando si verifica un errore nel programma. Di seguito spiegheremo come utilizzare ciascuna di esse.
Blocco try
All'interno del blocco try
, scrivi il codice che desideri eseguire. Se si verifica un errore in questo blocco, l'esecuzione del programma passa immediatamente al blocco except
.
1try:
2 # Code that may raise an error (division by zero, for example)
3 #number = int(input("Enter a number: "))
4 number = int("abc")
5 result = 10 / number
6 print("Result:", result)
7except ValueError as e:
8 # Handle invalid input (e.g. non-numeric input)
9 print("Invalid input. Please enter a whole number.")
10 print(f"Value error: {e}")
11except ZeroDivisionError as e:
12 # Handle division by zero error
13 print("Cannot divide by zero!")
14 print(f"Zero division error: {e}")
- Questo codice è un esempio di rilevamento degli errori in un blocco
try
e di gestione appropriata catturando oValueError
oZeroDivisionError
.
Blocco except
Nel blocco except
, scrivi il codice che verrà eseguito quando si verifica una specifica eccezione (errore). Puoi anche catturare eccezioni specifiche in base al tipo di eccezione che si verifica.
1try:
2 #number = int(input("Enter a number: "))
3 number = 0
4 result = 10 / number
5 print("Result:", result)
6except ZeroDivisionError as e:
7 print("Cannot divide by zero!")
8 print(f"Zero division error: {e}")
9except ValueError as e:
10 print("Input was not a valid integer.")
11 print(f"Value error: {e}")
- Questo codice è un esempio di esecuzione di una gestione diversa per ogni tipo di eccezione nel blocco
except
quando si verifica un errore nel bloccotry
.
Gestire più eccezioni insieme
Specifica una tupla quando più classi di eccezioni possono condividere la stessa logica di gestione.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- Questo codice è un esempio di cattura di entrambi
IndexError
eZeroDivisionError
insieme e di gestione delle eccezioni nello stesso modo.
Catturare eccezioni incondizionatamente
Ometti l'argomento per except
se vuoi gestire tutti i tipi di eccezioni in un unico blocco.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- Tuttavia, gestire eccezioni specifiche piuttosto che catturare incondizionatamente tutte le eccezioni è più utile per trovare bug e fare debug. Quando possibile, gestire esplicitamente solo le eccezioni previste come
ValueError
oTypeError
aumenterà la robustezza del tuo codice.
Blocco else
Il blocco else
viene eseguito solo se non si verificano errori nel blocco try
.
1try:
2 #number = int(input("Enter a number: "))
3 number = 5
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
- Questo codice è un esempio in cui il blocco
else
viene eseguito solo se non si verifica alcun errore nel bloccotry
.
Blocco finally
Il blocco finally
viene utilizzato per scrivere codice che verrà sempre eseguito alla fine, indipendentemente dal fatto che si sia verificato un errore nel blocco try
. È utile per rilasciare risorse o eseguire operazioni di pulizia.
1try:
2 #number = int(input("Enter a number: "))
3 number = int("abc")
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
14finally:
15 # This block will always execute, regardless of whether an exception was raised
16 print("Execution completed.")
- Questo codice è un esempio che dimostra che il blocco
finally
viene eseguito indipendentemente dal verificarsi o meno di un'eccezione.
La parola chiave raise
È anche possibile sollevare un'eccezione usando la parola chiave raise
quando non vengono soddisfatte determinate condizioni nel codice esistente.
1def divide(a, b):
2 if b == 0:
3 raise ValueError("Cannot divide by zero.")
4 return a / b
5
6try:
7 result = divide(10, 0)
8except ValueError as e:
9 print(f"Error: {e}")
- Questo codice è un esempio di sollevamento esplicito di un'eccezione utilizzando la parola chiave
raise
quando una condizione non viene soddisfatta.
Conclusione
Gestendo gli errori in questo modo, puoi evitare arresti anomali del programma, mostrare messaggi appropriati all'utente e continuare con l'elaborazione successiva del programma.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.