lettura facile

L'istruzione raise in Python

In Python l'istruzione raise ti permette di sollevare un'eccezione manualmente.

raise ExceptionType("Messaggio di errore")

Dove `ExceptionType` è il tipo di eccezione che vuoi sollevare (ad esempio, `ValueError`, `TypeError`, `RuntimeError`, ecc.).

L'argomento tra parentesi è facoltativo ed è una stringa che descrive l'errore. Questo messaggio verrà visualizzato quando l'eccezione viene catturata.

Cos'è un'eccezione? Un'eccezione è un evento che si verifica durante l'esecuzione di un programma e che interrompe il normale flusso delle istruzioni. In Python, le eccezioni sono utilizzate per gestire errori che possono verificarsi durante l'esecuzione del codice. Quando si verifica un'eccezione, il programma termina immediatamente l'esecuzione della funzione corrente e passa il controllo al gestore dell'eccezione appropriato.

Perché sollevare un'eccezione manualmente?

Questo può essere fatto per vari motivi, ad esempio quando si desidera interrompere l'esecuzione di una funzione a causa di un input non valido o di una condizione che non può essere gestita.

Vediamo alcuni esempi pratici per chiarire l'uso dell'istruzione `raise`.

Immagina di avere una funzione che calcola il reciproco di un numero. Se il numero passato è zero, la divisione per zero solleverà un'eccezione. Possiamo usare `raise` per gestire questa situazione in modo esplicito.

def calcola_reciproco(numero):
    if numero == 0:
        raise ValueError("Non è possibile calcolare il reciproco di zero.")
    return 1 / numero

try:
    risultato = calcola_reciproco(0)
except ValueError as e:
    print(f"Errore: {e}")

In questo esempio, se `numero` è zero, solleviamo un `ValueError` con un messaggio chiaro. Nel blocco `try`, catturiamo l'eccezione e stampiamo il messaggio di errore.

Poiché chiamiamo la funzione passandogli come argomento zero, l'output del programma è:

Non è possibile calcolare il reciproco di zero.

Puoi anche creare le tue eccezioni personalizzate definendo una nuova classe che eredita da `Exception`.

class NumeroNegativoError(Exception):
    pass

def calcola_radice_quadrata(numero):
    if numero < 0:
        raise NumeroNegativoError("Non è possibile calcolare la radice quadrata di un numero negativo.")
    return numero ** 0.5

try:
    risultato = calcola_radice_quadrata(-4)
except NumeroNegativoError as e:
    print(f"Errore: {e}")

In questo esempio, abbiamo definito un'eccezione personalizzata `NumeroNegativoError` e l'abbiamo utilizzata per sollevare un errore quando viene passato un numero negativo alla funzione `calcola_radice_quadrata`.

Poi chiamiamo la funzione passandogli come argomento -4.

Poiché si tratta di un numero negativo, viene sollevata l'eccezione e il programma risponde:

Errore: Non è possibile calcolare la radice quadrata di un numero negativo.

In generale, l'istruzione raise è molto utile quando vuoi segnalare un errore che non può essere gestito all'interno della funzione corrente. Ti permette di interrompere l'esecuzione di una funzione a causa di un input non valido o di una condizione anomala. E' utile anche per sviluppare un modulo o una libreria e vuoi fornire messaggi di errore chiari agli utenti del tuo codice.

Ricorda sempre di gestire le eccezioni in modo appropriato utilizzando i blocchi try-except, e di fornire messaggi di errore utili che possano aiutare a diagnosticare e risolvere i problemi.

Raise From

A volte, mentre gestiamo un'eccezione, potrebbe essere utile sollevarne un'altra.

Questo può accadere, ad esempio, quando si vuole fornire un contesto aggiuntivo o quando un'eccezione è causata da un'altra eccezione. Qui entra in gioco raise from.

Ad esempio, immagina di avere una funzione che converte una stringa in un numero intero.

def convert_to_int(s):
    try:
        return int(s)
    except ValueError as e:
        raise ValueError(f"Errore di conversione: '{s}' non è un numero valido") from e

def main():
    user_input = "abc"
    try:
        number = convert_to_int(user_input)
        print(f"Il numero è: {number}")
    except ValueError as e:
        print(e)

main()

In questo codice la funzione convert_to_int() tenta di convertire una stringa `s` in un intero usando int(s).

Se la conversione fallisce, viene sollevata un'eccezione `ValueError`.

Utilizzando `raise from`, solleviamo una nuova eccezione `ValueError` con un messaggio personalizzato "Errore di conversione: '{s}' non è un numero valido", mantenendo il contesto dell'eccezione originale.

Quindi, nel blocco `try` di `main`, se si verifica un `ValueError`, l'errore viene catturato e stampato con il contesto aggiuntivo.

Errore di conversione: 'abc' non è un numero valido

Spero che questa guida ti sia stata utile! Se hai altre domande o vuoi approfondire qualche aspetto, scrivi nel campo qui sotto.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin