En Python, ¿cómo puedo imprimir la pila de llamadas actual desde un método (para fines de depuración).
python
debugging
stack-trace
uno mismo
fuente
fuente
sys._current_frames()
. Por ejemplo, py_better_exchookdump_all_thread_tracebacks
hace eso (descargo de responsabilidad: escribí eso).fuente
traceback.print_exc()
que te da casi lo mismo que hubieras obtenido sin laexcept
declaración (y también es menos codificado que la respuesta aceptada).traceback.print_exc()
imprime el seguimiento de la pila para cualquier excepción que pueda estar manejando, pero esto no resuelve la pregunta original, que es cómo imprimir la pila actual ("dónde está ahora" en lugar de "dónde estaba su código cuando se produjo la última excepción off, if any ".)inspect.stack()
devuelve la pila actual en lugar del rastreo de excepción:Consulte https://gist.github.com/FredLoney/5454553 para obtener una función de utilidad log_stack.
fuente
Si usa el depurador de python, no solo sondea interactivamente las variables, sino que puede obtener la pila de llamadas con el comando "where" o "w".
Así que en la parte superior de tu programa
Luego en el código donde quieres ver lo que está sucediendo
y te dejan caer en un aviso
fuente
where
?(pdb)
simplemente escribawhere
e imprimirá el seguimiento de la pila en el terminal.breakpoint()
que evita la necesidad de importar pdb.para aquellos que necesitan imprimir la pila de llamadas mientras usan pdb, simplemente hagan
fuente
Aquí hay una variación de la excelente respuesta de @ RichieHindle que implementa un decorador que se puede aplicar selectivamente a las funciones según lo desee. Funciona con Python 2.7.14 y 3.6.4.
Salida de muestra:
fuente
Instalar Inspect-it
Código
puedes hacer un fragmento de esta línea
le mostrará una lista de la pila de llamadas de función con un nombre de archivo y un número de línea
lista desde el principio hasta donde pones esta línea
fuente