CodeGym /Corso Java /Python SELF IT /Lancio di eccezione

Lancio di eccezione

Python SELF IT
Livello 18 , Lezione 0
Disponibile

6.1 Lancio intenzionale delle eccezioni

In Python puoi lanciare intenzionalmente eccezioni utilizzando l'operatore raise. Questo ti permette di segnalare l'occorrenza di un errore o una situazione problematica nel tuo programma. Diamo un'occhiata ai diversi modi di usare l'operatore raise e re-incapsulamento delle eccezioni.

Lancio delle eccezioni standard

La sintassi generale di questa operazione ha il seguente aspetto:


raise exception

Puoi lanciare eccezioni standard come Exception, TypeError ed altre, passando loro messaggi pertinenti.

Esempio: raise Exception


def check_number(value):
    if value < 0:
        raise Exception("Mi dispiace, non sono ammessi numeri sotto lo zero")
        
try:
    check_number(-5)
except Exception as e:
    print(f"Eccezione catturata: {e}")

In questo esempio, se il valore è minore di zero, viene lanciata un' Exception con il messaggio "Mi dispiace, non sono ammessi numeri sotto lo zero".

Esempio: raise TypeError


def check_integer(value):
    if not isinstance(value, int):
        raise TypeError("Sono consentiti solo interi")
        
try:
    check_integer("string")
except TypeError as e:
    print(f"Eccezione catturata: {e}")

In questo esempio, se il valore non è un numero intero, viene lanciato un TypeError con il messaggio "Sono consentiti solo interi".

6.2 Re-incapsulamento dell'eccezione

A volte è necessario intercettare un'eccezione e lanciarne un'altra, fornendo informazioni più specifiche o utili. Questo può essere fatto usando l'operatore raise ... from, che mantiene l'eccezione originale come causa per la nuova.

La sintassi generale di questa operazione ha il seguente aspetto:


raise nuova_eccezione from vecchia_eccezione

Esempio: Re-incapsulamento dell'eccezione


class EmptyVariableError(Exception):
    pass
        
def check_non_empty(value):
    if value == "":
        raise ValueError("La variabile è vuota")
        
try:
    check_non_empty("")
except ValueError as e:
    raise EmptyVariableError("Variabile vuota rilevata") from e

In questo esempio, se il valore della variabile è vuoto, viene prima lanciato un ValueError con il messaggio "La variabile è vuota". Questa eccezione viene quindi intercettata, e viene lanciata una nuova eccezione EmptyVariableError con il messaggio "Variabile vuota rilevata", con l'eccezione originale passata grazie a from.

6.3 Analisi delle eccezioni re-incapsulate

Utilizzare l'operatore raise ... from permette di mantenere le informazioni sulla catena delle eccezioni, il che può essere utile per il debugging. Puoi analizzare le eccezioni re-incapsulate e le loro cause.

Esempio di analisi delle eccezioni re-incapsulate:


class EmptyVariableError(Exception):
    pass
        
def check_non_empty(value):
    if value == "":
        raise ValueError("La variabile è vuota")
        
try:
    check_non_empty("")
except ValueError as e:
    raise EmptyVariableError("Variabile vuota rilevata") from e

L'esecuzione del codice sopra riportato produrrà il seguente output:


Traceback (most recent call last):
    File "example.py", line 8, in 
        check_non_empty("")
    File "example.py", line 5, in check_non_empty
        raise ValueError("La variabile è vuota")
ValueError: La variabile è vuota
          
The above exception was the direct cause of the following exception:
          
Traceback (most recent call last):
    File "example.py", line 10, in 
        raise EmptyVariableError("Variabile vuota rilevata") from e
EmptyVariableError: Variabile vuota rilevata

Il primo errore (segnato in verde) è l'errore originale, che è sorto da qualche parte in profondità nel codice. A volte questi errori si verificano periodicamente, e questo è un comportamento normale del programma.

Il secondo errore (segnato in blu) è un errore di livello più alto. Il tuo programma o framework dovrebbe sapere come gestirlo. Ma se vuoi scavare più a fondo e scoprire le cause dell'errore, è proprio l'errore verde che può aiutarti.

Tutto è fatto in modo molto ragionevole.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION