de Python Docs: P>
sys.excepthook (type, valeur, trace) code> p>Cette fonction imprime une traçabilité donnée et une exception à
sys.ssderr code>. p>Lorsqu'une exception est levée et non capturée, l'interprète appelle
sys.excepthook code> avec trois arguments, la classe d'exception, l'instance d'exception et un objet de trace. Dans une session interactive, cela se produit juste avant que le contrôle ne soit renvoyé à l'invite; Dans un programme Python, cela se produit juste avant la sortie du programme. La manipulation de telles exceptions de niveau supérieur peut être personnalisée en attribuant une autre fonction de trois arguments àsys.excepthook code>. P> blockQuote>http://docs.python.org/library/sys.html p>
Comment puis-je modifier cela dans le monde entier afin que l'action par défaut soit pour toujours invoquer
pdb code>? Y a-t-il un fichier de configuration que je peux changer? Je ne veux pas envelopper mon code pour faire cela. P>
3 Réponses :
Voici ce dont vous avez besoin
http://ynniv.com/blog /2007/11/debugging-pytHon.html P>
Trois façons, le premier est simple mais brut ( Thomas Heller ) - Ajoutez les suivantes aux packages de site / SITECUSTOMIZE.PY: P>
# code snippet, to be included in 'sitecustomize.py'
import sys
def info(type, value, tb):
if (#hasattr(sys, "ps1") or
not sys.stderr.isatty() or
not sys.stdin.isatty()):
# stdin or stderr is redirected, just do the normal thing
original_hook(type, value, tb)
else:
# a terminal is attached and stderr is not redirected, debug
import traceback, pdb
traceback.print_exception(type, value, tb)
print
pdb.pm()
#traceback.print_stack()
original_hook = sys.excepthook
if sys.excepthook == sys.__excepthook__:
# if someone already patched excepthook, let them win
sys.excepthook = info
Essayez:
import pdb
import sys
def excepthook(type, value, traceback):
pdb.post_mortem(traceback)
excepthook.old = sys.excepthook
sys.excepthook = excepthook
def raise_exception():
raise_exception()
raise_exception()
Je ne pense pas que la nommée L'appelant PDB 'Excepthook' est sage.
Une autre option consiste à utiliser Ipython, que je considère comme un outil indispensable pour tout développeur de python de toute façon. Au lieu d'exécuter votre script de la coquille, passez-le d'Ipython avec% exécuté. Lorsqu'une exception se produit, vous pouvez taper% de débogage pour le déboguer. (Il y a aussi une option pour déboguer automatiquement toute exception qui se produit, mais j'oublie ce que c'est.) P>