tipos - ¿Puedes pasar por el código de Python para ayudar a resolver problemas?
traceback(most recent call last) python (9)
Mediante el uso de Python Interactive Debugger ''pdb''
El primer paso es hacer que el intérprete de Python entre en el modo de depuración.
A. Desde la línea de comando
La manera más directa, corriendo desde la línea de comandos, del intérprete de Python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. Dentro del intérprete
Al desarrollar versiones tempranas de módulos y experimentarlos de forma más iterativa.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run(''pdb_script.MyObj(5).go()'')
> <string>(1)<module>()
(Pdb)
C. Desde dentro de tu programa
Para un proyecto grande y un módulo de larga ejecución, puede iniciar la depuración desde el programa utilizando import pdb y set_trace () de esta manera:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == ''__main__'':
MyObj(5).go()
La depuración paso a paso para entrar en más interno
Ejecuta la siguiente declaración ... con "n" (siguiente)
Repitiendo el último comando de depuración ... con ENTER
Dejarlo todo ... con "q" (dejar de fumar)
Imprimir el valor de las variables ... con "p" (imprimir)
a) pa
Desactivando el aviso (Pdb) ... con "c" (continuar)
Ver dónde estás ... con "l" (lista)
Entrando en subrutinas ... con "s" (entrar)
Continuando ... pero solo hasta el final de la subrutina actual ... con "r" (retorno)
Asignar un nuevo valor
a) ! b = "B"
Establecer un punto de interrupción
a) romper el nido de lino
b) break nombre de función
c) romper el nombre del archivo: linenumber
Punto de interrupción temporal
a) tbreak linenumber
Punto de interrupción condicional
a) romper el número de ropa, condición
Nota: ** Todos estos comandos se deben ejecutar desde ** pdb
Para un conocimiento profundo, refiérase a:
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
En java / c # puede pasar fácilmente por el código para rastrear lo que podría estar yendo mal, e IDE hace que este proceso sea muy fácil de usar.
¿Puedes rastrear a través del código de Python de manera similar?
Hay un módulo llamado ''pdb'' en python. En la parte superior de tu secuencia de comandos python lo haces
import pdb
pdb.set_trace()
y entrarás en el modo de depuración. Puede usar ''s'' para el paso, ''n'' para seguir la siguiente línea similar a lo que haría con el depurador ''gdb''.
Puede ver el pdb que hace exactamente lo que está buscando, pero no a través de una GUI.
Si desea un IDE con depurador integrado, intente con PyScripter .
También es posible avanzar y rastrear programáticamente a través del código python (¡y es fácil!). Mire la documentación de sys.settrace() para más detalles. También here hay un tutorial para que comiences.
Visual Studio con PTVS podría ser una opción para usted: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
¡Sí! ¡Hay un depurador de Python llamado pdb
solo por hacer eso!
Puede iniciar un programa de Python a través de pdb
utilizando pdb myscript.py
o python -m pdb myscript.py
.
Hay algunos comandos que puede emitir, que están documentados en la página pdb
.
Algunos útiles para recordar son:
-
b
: establecer un punto de interrupción -
c
: continúe depurando hasta llegar a un punto de interrupción -
s
: paso por el código -
n
: para ir a la siguiente línea de código -
l
: enumera el código fuente para el archivo actual (valor predeterminado: 11 líneas, incluida la línea que se está ejecutando) -
u
: navega por un marco de pila -
d
: navegar por un marco de pila -
p
: para imprimir el valor de una expresión en el contexto actual
Si no desea utilizar un depurador de línea de comandos, algunos IDEs como Pydev tienen un depurador GUI.
https://wiki.python.org/moin/PythonDebuggingTools
pudb es un buen reemplazo directo para pdb