Rhys
¿Cómo puedo saltarme un bucle usando pdb.set_trace()
?
Por ejemplo,
pdb.set_trace()
for i in range(5):
print(i)
print('Done!')
pdb
indicaciones antes del bucle. Ingresé un comando. Se devuelven todos los valores 1-5 y luego me gustaría que me pregunten con pdb
de nuevo ante el print('Done!')
ejecuta
triturado
Prueba el until
declaración.
Ir a la última línea del bucle (con next
o n
) y luego usar until
o unt
. Esto lo llevará a la siguiente línea, justo después del bucle.
http://www.doughellmann.com/PyMOTW/pdb/ tiene una buena explicacion
-
Del artículo: vaya a la última línea del ciclo for usando
n
y luego escribauntil
. Esto irá hasta que al menos se exceda esa línea actual.– sachinruk
2 de noviembre de 2018 a las 5:48
-
También funciona con listas de comprensión. No tienes que preocuparte por la última línea.
– Shiva
23 de noviembre de 2018 a las 10:24
-
¿Qué harías, si ir a la última línea del bucle es engorroso? ¿Realmente no hay equivalente a
f
utilizado por Rdebug
función que “finaliza la ejecución del ciclo o función actual” (adv-r.hadley.nz/debugging.html)?– Preguntado
17 de junio de 2019 a las 12:51
-
Usando
until
(o su forma abreviadaunt
) sin argumentos siempre bajará una línea (a menos que presione una declaración de retorno), por lo que también puede usarlo varias veces en lugar den
.– Boris Verjovskiy
22 de noviembre de 2019 a las 21:39
-
no funciona con
breakpoint()
establecer en el bucle enpython 3
. losVB Editor
puede aceptar puntos de interrupción ‘sobre la marcha’, pero lo más probable es que no sea el caso conpdb
.– Timo
23 de septiembre de 2020 a las 5:53
Debe establecer un punto de interrupción después del bucle (“romper main.py:4” suponiendo que las líneas anteriores estén en un archivo llamado main.py) y luego continuar (“c”).
En el enlace mencionado por la respuesta aceptada (https://pymotw.com/3/pdb/), encontré esta sección algo más útil:
Para permitir que la ejecución se ejecute hasta una línea específica, pase el número de línea al comando hasta.
Aquí hay un ejemplo de cómo puede funcionar eso re: bucles:
Le ahorra dos cosas: tener que crear puntos de interrupción adicionales y tener que navegar hasta el final de un ciclo (especialmente cuando ya haya iterado de tal manera que no podría hacerlo sin volver a ejecutar el depurador).
Aquí están los documentos de Python en until
. Por cierto, estoy usando pdb++
como complemento para el depurador estándar (de ahí el formato) pero until
funciona igual en ambos.
Puede establecer otro punto de interrupción después del ciclo y saltar a él (al depurar) con c
:
pdb.set_trace()
for i in range(5):
print(i)
pdb.set_trace()
print('Done!')
j_juggernaut
Si entendí bien esto.
Una posible forma de hacerlo sería:
una vez que te consigas pdb
inmediato . Solo pega n
(siguiente) 10 veces para salir del bucle.
Sin embargo, no conozco una forma de salir de un bucle en pdb
.
podrías usar r
para salir de una función sin embargo.
-
¿Y si el ciclo es 10000000? Tu respuesta es muy obvia.
– hecvd
13 de julio de 2016 a las 17:03
-
¿Y si el ciclo es 10000000? Tu respuesta es muy obvia.
– hecvd
13 de julio de 2016 a las 17:03