Gestione degli errori
Una gestione degli errori è presente in quasi tutti i linguaggi moderni, di cui la maggior parte utilizza un approccio basato su classi.
Approccio basato su classi
Il Runtime Environment prevede la definizione di una classe madre rappresentante la generica eccezione che contiene almeno:
- identificatore
- rappresentazione dello stack corrente
Gli errori possono essere sollevati:
- automaticamente da anomalie a runtime
- dallo sviluppatore tramite
throwèraise
Si può anche impostare il codice da eseguire quando una eccezione viene sollevata. Se il codice per gestire il problema non è previsto, il programma stampa l’errore e termina.
try:
<blocco con possibile eccezione>
except e_1:
pass
except (e_2, e_3):
...
except e_n as inst:
# argomenti dell'errore
inst.args
except:
<gestisce una generica anomialia>
else:
<codice da eseguire in assenza di eccezioni>
finally:
<codice da eseguire comunque in uscita>e_n è sottoclasse di Exception.
class NuovoErrore(Exception):
def __init__(self, message="Ho commesso un errore, mi dispace!", errors=None):
self.message = message
self.errors = errors
def __str__(self):
return self.message
# solleva l'eccezione NuovoErrore
raise NuovoErrore
raise NuovoErrore("Messaggio di errore custom")L’errore ha un attributo args, che contiene il messaggio di errore e il numero dell’errore. Per stampare lo stack serve importare traceback.
import traceback
try:
raise NuovoErrore("Questa volta non è colpa mia!",errors=2)
except NuovoErrore as inst:
print(inst.args)
print(inst.errors)
traceback.print_exc()