¿Por qué importa pdb; pdb.set_trace desencadena dos escenarios de depuración diferentes cuando se llama de manera diferente en Spyder?
Esta es una pregunta de seguimiento paraDepuración gradual del código Python seleccionado.
Por queimport pdb; pdb.set_trace
desencadenar dos escenarios de depuración diferentes cuando se llama de manera diferente en Spyder?
Aquí está el código de muestra editado en elrespuesta de Carlos Cordoba a la pregunta mencionada anteriormente.
El código:
def foo():
names = ['A', 'B', 'C']
values = [11,12,13]
i = 0
import pdb; pdb.set_trace()
for n in names:
variable = str(n) + ' = ' + str(values[i])
print(variable)
i += 1
foo()
Escenario 1 -Run file (F5)
, Continue Execution until next breakpoint (F12)
yRun Current Line (F10)
Este procedimiento funciona bien. Permítanme explicar cómo, por el bien del contexto:
Run file (F5)
destaca la línea 2:
Proceder conContinue Execution until next breakpoint (F12)
lo lleva directamente a la línea 8. Observe también en la siguiente captura de pantalla que el Explorador de variables se rellena con las variablesi
, names
yvalues
. Otras variables se agregan y actualizan a medida que avanza por el resto del código conRun Current Line (F10)
:
O podríasContinue Execution until next breakpoint (F12)
y terminar el procedimiento de esa manera. Haciendo lo primero todo el camino hastafoo()
borra el explorador de variables, imprime --Return-- en el depurador ipdb y sale del depurador.
Y supongo que debería seguir con esta forma de hacer las cosas cada vez, pero también estoy muy interesado en las otras opciones de ejecución de código que ofrece Spyder. Y soy particularmente aficionado a definir y ejecutar celdas con # %% y Ctrl + Enter.
Escenario 2: Ctrl + Intro en una celda que incluye todo el código
Ctrl + Enter dentro de la celda resalta la línea 8 y llena el Explorador de variables:
Proceder conContinue Execution until next breakpoint (F12)
borra el explorador de variables y sale del depurador como antes:
Y eso también está bien, pero aquí está mi caso:
Escenario 3: ejecutar y depurar varias celdas
Cuando estoy depurando fragmentos de código de proyectos de ciencia de datos más grandes, a menudo termino definiendo algunas variables en un lugar y deseando depurar funciones que usan estas variables como entrada en otro lugar. Y es por eso que a menudo termino en la situación a continuación, donde he definido las variables en una celda, y tengo un bucle For usando las mismas variables en otra celda:
Celda que contiene variables
Celda que contiene For Loop
Pero presionar Ctrl + Entrar y continuar con Ejecutar línea actual (F10) desencadena una situación desordenada eninteractiveshell.py
:
Y ahora, las preguntas:
¿Que está pasando aqui?¿Se puede evitar esto?¿Por qué no es posible depurar celdas (o código resaltado + f9) como este?Gracias por cualquier sugerencia!