¿Cuáles son tus mejores consejos para depurar Python?
No solo enumere un depurador en particular sin decir lo que realmente puede hacer.
Relacionado
- ¿Cuáles son buenas maneras de hacer que mi código Python se ejecute por primera vez? - Esto trata de minimizar errores
Respuestas:
PDB
Puede usar el módulo pdb, insertarlo en
pdb.set_trace()
cualquier lugar y funcionará como un punto de interrupción.Para continuar la ejecución use
c
(ocont
ocontinue
).Es posible ejecutar expresiones arbitrarias de Python usando pdb. Por ejemplo, si encuentra un error, puede corregir el código y luego escribir una expresión de tipo para tener el mismo efecto en el código en ejecución
ipdb es una versión de pdb para IPython . Permite el uso de pdb con todas las características de IPython, incluida la finalización de pestañas.
También es posible configurar pdb para que se ejecute automáticamente en una excepción no detectada.
Pydb fue escrito para ser una versión mejorada de Pdb. Beneficios?
fuente
myserver.com/pdb
en modo de depuración que simplemente lo hagaimport pdb; pdb.set_trace()
. Si está utilizando Flask / Werkzeug que tiene un depurador interactivo, también puede tener una vista que simplemente lo hagaassert False
.http://pypi.python.org/pypi/pudb , un depurador de Python basado en consola y pantalla completa.
Agradable para depurar scripts independientes, solo ejecuta
fuente
pip install pudb
Si está utilizando pdb, puede definir alias para accesos directos. Yo uso estos:
fuente
Inicio sesión
Python ya tiene un excelente módulo de registro incorporado . Es posible que desee utilizar la plantilla de registro aquí .
El módulo de registro le permite especificar un nivel de importancia; durante la depuración puede registrar todo, mientras que durante la operación normal solo puede registrar cosas críticas. Puedes encender y apagar las cosas.
La mayoría de las personas solo usan declaraciones de impresión básicas para depurar y luego eliminan las declaraciones de impresión. Es mejor dejarlos dentro, pero deshabilitarlos; luego, cuando tenga otro error, puede volver a habilitar todo y revisar sus registros.
Esta puede ser la mejor manera posible de depurar programas que necesitan hacer cosas rápidamente, como los programas de red que necesitan responder antes de que el otro extremo de la conexión de red agote el tiempo y desaparezca. Es posible que no tenga mucho tiempo para un depurador de un solo paso; pero puede dejar que su código se ejecute y registrar todo, luego examinar detenidamente los registros y descubrir qué está sucediendo realmente.
EDITAR: La URL original para las plantillas fue: http://aymanh.com/python-debugging-techniques
Falta esta página, así que la reemplacé con una referencia a la instantánea guardada en archive.org: http://web.archive.org/web/20120819135307/http://aymanh.com/python-debugging-techniques
En caso de que desaparezca nuevamente, aquí están las plantillas que mencioné. Este es un código tomado del blog; No lo escribi.
Y aquí está su explicación de cómo usar lo anterior. Nuevamente, no obtengo el crédito por esto:
Por defecto, el módulo de registro imprime mensajes críticos, de error y de advertencia. Para cambiar esto para que se impriman todos los niveles, use:
Para enviar mensajes de registro a un archivo llamado debug.log, use:
fuente
Es posible imprimir qué líneas de Python se ejecutan (¡gracias Geo!). Esto tiene cualquier número de aplicaciones, por ejemplo, puede modificarlo para verificar cuándo se llaman funciones particulares o agregar algo como ## para que solo rastree líneas particulares.
code.interact te lleva a una consola interactiva
Si desea poder acceder fácilmente al historial de su consola, consulte: " ¿Puedo tener un mecanismo de historial como en el shell? " (Tendrá que buscarlo).
El autocompletado puede habilitarse para el intérprete .
fuente
ipdb es como pdb, con la genialidad de ipython.
fuente
print
declaracionesdebug_print
función en lugar de imprimir para deshabilitar fácilmentepprint
módulo es invaluable para estructuras complejas.fuente
La forma obvia de depurar un script
si no sabes exactamente dónde está ese script
fuente
PyDev
PyDev tiene un depurador interactivo bastante bueno. Tiene expresiones de observación, lista para evaluar, listas de subprocesos y pilas y (casi) todas las comodidades habituales que espera de un depurador visual moderno. Incluso puede adjuntar a un proceso en ejecución y realizar una depuración remota.
Sin embargo, al igual que otros depuradores visuales, me resulta útil principalmente para problemas simples o para problemas muy complicados después de haber intentado todo lo demás. Todavía hago la mayor parte del trabajo pesado con la tala.
fuente
Si está familiarizado con Visual Studio, Python Tools para Visual Studio es lo que busca.
fuente
Winpdb es muy agradable y, al contrario de su nombre, es completamente multiplataforma.
Tiene un depurador de GUI y basado en indicador muy agradable , y admite depuración remota.
fuente
En Vim, tengo estos tres enlaces:
rpdb2
es un depurador de Python remoto, que se puede usar con WinPDB, un depurador gráfico sólido. Porque sé que preguntarás, puede hacer todo lo que espero que haga un depurador gráfico :)Utilizo
pdb
desdenose.tools
para poder depurar las pruebas unitarias, así como el código normal.Finalmente, el
F7
mapeo imprimirá un rastreo (similar al tipo que obtienes cuando una excepción aparece en la parte superior de la pila). Lo he encontrado realmente útil más de unas pocas veces.fuente
Definiendo métodos repr () útiles para sus clases (para que pueda ver qué es un objeto) y utilizando el formato repr () o "% r"% (...) o "... {0! R} ..". (...) en sus mensajes / registros de depuración, en mi humilde opinión, es una clave para la depuración eficiente.
Además, los depuradores mencionados en otras respuestas harán uso de los métodos repr ().
fuente
Obtener un seguimiento de pila de una aplicación Python en ejecución
Hay varios trucos aquí . Éstos incluyen
fuente
Si no le gusta pasar tiempo en depuradores (y no aprecia la mala usabilidad de la
pdb
interfaz de línea de comandos), puede volcar el seguimiento de ejecución y analizarlo más tarde. Por ejemplo:Esto volcará toda la línea de
setup.py install
ejecución de origenexecution.log
.Para facilitar la personalización de la salida de rastreo y escribir sus propios trazadores, reuní algunas piezas de código en el módulo xtrace (dominio público).
fuente
Cuando es posible, depuro usando
M-x pdb
emacs para la depuración a nivel fuente.fuente
Hay un curso completo en línea llamado " Depuración de software " por Andreas Zeller en Udacity, lleno de consejos sobre depuración:
Muy recomendable.
fuente
si desea una buena forma gráfica de imprimir su pila de llamadas de manera legible, consulte esta utilidad: https://github.com/joerick/pyinstrument
Ejecutar desde la línea de comando:
Ejecutar como un módulo:
Corre con django:
Sólo tiene que añadir
pyinstrument.middleware.ProfilerMiddleware
aMIDDLEWARE_CLASSES
, a continuación, añadir?profile
al final de la URL de solicitud para activar el generador de perfiles.fuente