Así que estoy ejecutando un script de Python dentro del cual estoy llamando al depurador de Python, PDB escribiendo:
import ipdb; ipdb.set_trace()
(La versión de PDB de iPython, aunque no creo que marque la diferencia; lo uso solo para la salida en color).
Ahora, cuando llego al depurador, quiero ejecutar una instrucción de varias líneas, como una cláusula if o un bucle for, pero tan pronto como escribo
if condition:
y presiono la tecla de retorno, recibo el mensaje de error *** SyntaxError: invalid syntax (<stdin>, line 1)
¿Cómo se pueden ejecutar declaraciones de varias líneas dentro de PDB? Si no es posible, ¿hay alguna forma de evitar que se siga ejecutando una cláusula if o un bucle for?
interact
de comandos ( como he aprendido de este mensaje de seguimiento de errores ).!
necesario en laimport
declaración?!
, para evitar accidentes. Por ejemplo,c = 42
en pdb continuaría la ejecución en lugar de asignar a variablec
.interact
también, pero no funciona bien con Spyder para mí.En python3
ipdb
(ypdb
) tenemos un comando llamado interactuar . Se puede usar para:Para usarlo, simplemente ingrese
interact
en el indicador pdb. Entre otras cosas, es útil para aplicar código que abarca varias líneas y también para evitar la activación accidental de otros comandos pdb.fuente
interact
es una sugerencia demasiado fuerte. 90% esto es todo lo que necesito, y es mucho más fácil de escribir quefrom IPython import embed; embed()
Mi recomendación es usar la incrustación de IPython.
fuente
import embed; embed(user_ns=locals())
.Dentro del intérprete o depurador Python (2.7.1) (importar pdb), puede ejecutar una instrucción de varias líneas con la siguiente sintaxis.
Nota: Cuando estoy dentro del intérprete, tengo que presionar regresar dos veces antes de que se ejecute el código. Dentro del depurador, sin embargo, solo tengo que presionar return una vez.
fuente
Existe el caso especial si desea que se ejecuten un par de comandos al alcanzar un punto de interrupción. Luego está el comando depurador
commands
. Le permite ingresar múltiples líneas de comandos y luego finalizar toda la secuencia con laend
palabra clave. Más con(pdb) help commands
.fuente
No sé si puede hacer esto, sin embargo, sería una gran característica para ipdb. Puede utilizar listas de comprensión, por supuesto, y ejecutar expresiones simples de varias líneas como:
También puede escribir algunas funciones de antemano para hacer lo que sea que necesite hacer que normalmente tomaría varias líneas.
fuente
Escriba su código en un editor de texto, luego péguelo en el depurador:
Es una solución tonta, pero también sucia rápida y de trabajo. Funciona en la terminal de Linux, pero no estoy seguro de si funcionará en la consola de Windows.
fuente
*** SyntaxError: unexpected EOF while parsing