¿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!

Respuestas a la pregunta(1)

Su respuesta a la pregunta