L'istruzione raise in python
Nel linguaggio Python il comando raise mi permette di sollevare manualmente una eccezione dentro il codice.
La sintassi
raise [espressione]
A cosa serve?
Posso usarlo per mandare in errore il programma quando si presenta un determinato evento anomalo.
In questo caso l'istruzione propaga l'ultima eccezione che si è verificata o va in errore.
raise
In alternativa, posso invocare appositamente una particolare eccezione per gestirla in una struttura try except.
try:
raise errore:
except errore:
...
Esempi pratici
Ecco qualche esempio pratico per capire il funzionamento dell'istruzione raise in python.
Esempio 1
In questo script verifico il segno della variabile voto..
Se il numero è negativo, genero artificialmente un errore nel programma.
- voto=-1
- if (voto <= 0):
- raise "attenzione valore negativo"
- print(voto)
L'output del programma è il seguente:
Traceback (most recent call last):
File "Python36-32\tutorial.py", line 3, in <module>
raise "attenzione valore negativo"
TypeError: exceptions must derive from BaseException
Il programma va in errore e si blocca. In questo modo evito il proseguimento dell'elaborazione se l'errore.
E' utile se l'errore è particolarmente grave e non può essere gestito in altri modi.
Esempio 2
In questo esempio sollevo un'eccezione TypeError nella riga 3 della struttura try.
- try:
- print("1")
- raise TypeError
- except ZeroDivisionError:
- print("2")
- except TypeError:
- print("3")
L'interprete python cerca ed esegue la clausola excpet TypeError alla riga 6.
L'output dello script è il seguente:
1
3
Esempio 3
In questo script passo degli argomenti all'eccezione.
- try:
- print("1")
- raise Exception('4')
- except NameError:
- print("3")
- except Exception as problema:
- print(problema)
L'output del programma
1
4
Esempio 4 ( propagazione delle eccezioni )
In questo esempio digito raise senza alcuna eccezione nella riga 6.
- try:
- print("1")
- raise Exception('4')
- except Exception as problema:
- print(problema)
- raise
In questo caso, l'istruzione raise propaga l'ultima eccezione che si è verificata ossia "4" ( riga 3 ).
L'output dello script è il seguente:
1
4
Traceback (most recent call last):
File "tutorial.py", line 3, in <module>
raise Exception('4')
Exception: 4
Il programma esegue la riga 2 e solleva la prima eccezione alla riga 3.
Poi invoca la seconda eccezione alla riga 6 che eredita l'ultima eccezione (Exception('4')].
Non trovando altre clausole except per gestirla, lo script va in errore.
E così via.