Gestione degli errori in Python

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 o ValueError o ZeroDivisionError.

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 blocco try.

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 e ZeroDivisionError 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 o TypeError 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 blocco try.

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.

YouTube Video