[Python] sys.excepthook e ipdb
Pietro Battiston
me a pietrobattiston.it
Mar 15 Gen 2013 09:32:53 CET
Dovendo fare un lavoro di analisi in cui l'errore è sempre dietro
l'angolo (tranquilli, niente da mandare in produzione), sto riempiendo
il mio codice di cose tipo
try:
...
except:
import ipdb; ipdb.set_trace()
Tipicamente, intervenendo con ipdb riesco a risolvere il problema e poi
a dare "continue".
Ho pensato di fare il passo successivo: avviare ipdb ad ogni uncaught
Exception. Ho trovato http://code.activestate.com/recipes/65287/ , e
sostituito "pdb" con "ipdb". Ma c'è un problema: ipdb parte sì, ma
quando poi do "continue" non mi esegue il codice successivo. Se poi
sostituisco "pm()" con "set_trace()", il "continue" mi dà pure errore.
Ciò mi fa pensare che sys.excepthook non sia quello che mi serve (e in
effetti la documentazione¹ dice "this happens just before control is
returned to the prompt"). Qualcuno ha consigli migliori?
Il problema di un unico try... except globale è chiaramente che io
vorrei lavorare là (nella funzione) dove l'errore nasce.
Per riprodurre, potete usare
----8<--------8<--------8<--------8<--------8<--------8<--------8<----
def prova():
i = "a"
print int(i)
print "vado avanti"
prova()
----8<--------8<--------8<--------8<--------8<--------8<--------8<----
Idealmente, facendolo girare dovrei:
- ottenere un'exception a causa del casting a int, e quindi avviare ipdb
- essere in grado di appurare, dall'interno del debugger, che "i" vale
"a"
- fare eseguire il secondo print
ciao
Pietro
¹ http://docs.python.org/2/library/sys.html
Maggiori informazioni sulla lista
Python