Lanciare eccezioni
Abbiamo visto che le eccezioni avvengono quando si ha qualche tipologia di errore rilevata dal sistema durante l’esecuzione del codice. Può capitare a volte che siamo noi stessi a voler creare e lanciare un’eccezione. I motivi per fare questo possono essere molti.
Spesso si potrebbe voler creare un’eccezione più specifica, che segnali uno specifico errore a chi in futuro stia utilizzando il nostro codice. Per esempio, stiamo sviluppando del codice che analizza le immagini acquisite da una WebCam e voler creare una eccezione ImageTooDark per segnalare a chi stia usando il nostro codice che l’immagine da elaborare è troppo scura.
Un altro caso potrebbe essere quello di prendere un’eccezione generica e suddividerla in eccezioni più specifiche, e che possano quindi essere gestite in modo differente a seconda dei vari casi.
Per lanciare un’eccezione si usa la clausola raise.
raise NomeEccezione
Inoltre è possibile lanciare un’eccezione con argomento il messaggio di errore specifico
raise NomeEccezione(“dettaglio sull’errore”)
Si possono lanciare eccezioni già esistenti,
b = input("Inserisci un valore numerico: ")
b = int(b)
if b < 0:
raise ValueError("Valore Negativo")
Eseguendo il codice si ottiene infatti un’eccezione
>>>
Inserisci un valore numerico: -3
Traceback (most recent call last):
File "C:/Python34/prova.py", line 4, in
raise ValueError("Valore Negativo")
ValueError: Valore Negativo
Oppure utilizzarne di nuove. Per la definizione di una nuova eccezione è necessario utilizzare la definizione di classi (vedremo in seguito come fare, per ora copiate solo il codice). Una volta definita una nuova eccezione, potremo lanciarla con la clausola raise. Al momento di gestire la nostra eccezione (sia che lo faremo noi, o che lo farà qualcun altro) sarà possibile stampare direttamente il messaggio utilizzando l’attributo value che abbiamo definito all’interno della classe.
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
b = input("Inserisci un valore numerico: ")
try:
b = int(b)
if b < 0:
raise MyError("Valore Negativo")
except MyError as e:
print(e.value)
Infatti in questo caso il messaggio viene visualizzato a seguito del lancio (e della gestione) dell’eccezione MyError.
>>>
Inserisci un valore numerico: -3
Valore Negativo