varias una saltos salto otra multilinea lineas linea imprimir impresion dejar continuar concatenar con como blanco bajar python debugging multiline pdb

una - Cómo ejecutar sentencias de varias líneas dentro del propio depurador(PDB) de Python



saltos de linea python 3 (6)

Dentro del intérprete o depurador de Python (2.7.1) (importar pdb), puede ejecutar una instrucción de varias líneas con la siguiente sintaxis.

for i in range(5): print("Hello"); print("World"); print(i)

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 regresar una vez.

Así que estoy ejecutando un script de Python en el que 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, la utilizo solo para la salida de color).

Ahora, cuando llego al depurador, quiero ejecutar una declaración de varias líneas, como una cláusula if o un ciclo for, pero tan pronto como escribo

if condition:

y presionar la tecla de retorno, *** SyntaxError: invalid syntax (<stdin>, line 1) mensaje de error *** SyntaxError: invalid syntax (<stdin>, line 1)

¿Cómo se pueden ejecutar sentencias de varias líneas dentro de PDB? Si no es posible, ¿hay alguna forma de evitar la ejecución de una cláusula if o un ciclo for?


En python3, ipdb (y pdb ) tienen un comando llamado interact . Se puede usar para:

Inicie un intérprete interactivo (utilizando el módulo de code ) cuyo espacio de nombres global contiene todos los nombres (globales y locales) que se encuentran en el alcance actual.

Para usarlo, simplemente ingrese interact en el indicador pdb. Entre otras cosas, es útil para aplicar código que abarca múltiples líneas, y también para evitar la activación accidental de otros comandos pdb.


Existe el caso especial si desea que se ejecuten un par de comandos al llegar a un punto de corte. Luego están los commands comando del depurador. Le permite ingresar múltiples líneas de comandos y luego finalizar la secuencia completa con la palabra clave end . Más con (pdb) help commands .


Mi recomendación es usar la incrustación de IPython.

python ipdb> from IPython import embed; embed()


No sé si puedes hacer esto, eso sería una gran característica para ipdb sin embargo. Puede usar listas de comprensión por supuesto, y ejecutar expresiones simples de varias líneas como:

if y == 3: print y; print y; print y;

También podría escribir algunas funciones de antemano para hacer lo que sea necesario que normalmente tomaría varias líneas.


Puede hacer esto mientras está en pdb para iniciar una sesión de Python interactiva temporal con todas las variables locales disponibles:

(pdb) !import code; code.interact(local=vars()) Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>

Cuando hayas terminado, utiliza Ctrl-D para volver al indicador de pdb regular.

Simplemente no presione Ctrl-C, que terminará toda la sesión de pdb.