En Python, comment puis-je imprimer la pile d'appels actuelle à partir d'une méthode (à des fins de débogage).
python
debugging
stack-trace
soi-même
la source
la source
sys._current_frames()
. Par exemple, py_better_exchookdump_all_thread_tracebacks
fait cela (avertissement: j'ai écrit cela).la source
traceback.print_exc()
ce qui vous donne presque la même chose que vous auriez obtenue sans l'except
énoncé (et est également moins codant que la réponse acceptée).traceback.print_exc()
imprime la trace de la pile pour toute exception que vous pourriez gérer - mais cela ne résout pas la question d'origine, qui est de savoir comment imprimer la pile actuelle ("où vous êtes maintenant" par opposition à "où était votre code lors de la dernière exception) off, if any ".)inspect.stack()
renvoie la pile actuelle plutôt que l'exception traceback:Voir https://gist.github.com/FredLoney/5454553 pour une fonction utilitaire log_stack.
la source
Si vous utilisez le débogueur python, non seulement le sondage interactif des variables, mais vous pouvez obtenir la pile d'appels avec la commande "where" ou "w".
Donc en haut de votre programme
Ensuite, dans le code où vous voulez voir ce qui se passe
et vous êtes tombé dans une invite
la source
where
t-il?(pdb)
simplementwhere
et il imprimera la trace de la pile sur le terminal.breakpoint()
qui évite d'avoir à importer pdb.pour ceux qui ont besoin d'imprimer la pile d'appels tout en utilisant pdb, faites simplement
la source
Voici une variation de l'excellente réponse de @ RichieHindle qui implémente un décorateur qui peut être appliqué sélectivement aux fonctions comme vous le souhaitez. Fonctionne avec Python 2.7.14 et 3.6.4.
Sortie de l'échantillon:
la source
Installez Inspect-it
Code
vous pouvez créer un extrait de cette ligne
il vous montrera une liste de la pile d'appels de fonction avec un nom de fichier et un numéro de ligne
liste du début à l'endroit où vous mettez cette ligne
la source