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>