lunedì 26 luglio 2010

cosa ha scatenato un'eccezione? scopriamolo col modulo sys!

Problema: come fareste a loggare ogni eccezione senza conoscere l'eccezione e senza bloccare il programma?

piccolo esempio:

for expr in ("1/0", "5=False", "().append('3')"):
try:
eval(expr)
except:
pass #come fareste voi?
Non preoccupatevi, è normalissimo far valutare errori madornali come questi quando si parla di eccezioni xD

Il modulo "sys" è nostro amico, e ci mette a disposizione (grazie alle batterie incluse) alcuni metodi:
  • exc_info
  • exc_traceback
  • exc_type
  • exc_value
  • excepthook
  • exec_prefix

utilizzeremo il primo per mostrare i possibili errori derivanti dalla valutazione delle espressioni.

for expr in ("1/0", "5=False", "().append('3')"):
 try:
eval(expr)
except:
print sys.exc_info()


Se noi avviassimo il codice nell'IDLE Python, avremmo questi risultati:
(, ZeroDivisionError('integer division or modulo by zero',), )
(, SyntaxError('invalid syntax', ('', 1, 2, '5=False')), )
(, AttributeError("'tuple' object has no attribute 'append'",), )

Fate buon uso delle informazioni!!! Stay tuned!

0 commenti:

Posta un commento