Saliendo de Python Debugger ipdb

Utilizo ipdb bastante a menudo para saltar a un trozo de código aislado, es decir, es difícil escribir un script real que lo use. En su lugar, escribo un caso de prueba mínimo con burla y salto en él.

Ejemplar para el flujo de trabajo:

def func(): ... import ipdb ipdb.set_trace() ... def test_case(): ... func() ... 

Entonces, invocar

 py.test test_file.py -s -k test_case 

Ahora, por lo general solo marco una o dos variables, y luego quiero salir. Cambia el código y vuelve a hacerlo.

¿Cómo puedo dejar de fumar? El manual dice q sale del depurador. No (en realidad). Debe salir varias veces antes de que el depurador finalice. El mismo comportamiento para Ctrl-C y Ctrl-D (con la frustración adicional de que presionar Ctrl-D varias veces también salga de la terminal).

    ¿Hay alguna forma inteligente de forzar el abandono? ¿Es este flujo de trabajo incluso sensible? ¿Cuál es la forma estándar de hacerlo?

    .pdbrc siguiente en mi .pdbrc

     import os alias kk os.system('kill -9 %d' % os.getpid()) 

    kk mata al depurador y (el proceso que desencadena al depurador).

    Lo siguiente me funcionó:

     import sys sys.exit() 

    En las versiones más nuevas de ipython, como se mencionó arriba y abajo, esto no funciona. En ese caso,

     import os os._exit(0) 

    Todavía debería hacer el truco.

    Es el problema con la versión reciente de IPython 5.1.0. Puedes consultar con tu entorno utilizando el siguiente código:

     pip freeze | egrep -i '^i' 

    Se resolverá reduciendo a IPython == 5.0.0.

     pip install ipython==5.0.0 

    Funciona para mi.

    Como se mencionó en otra respuesta, esto fue un error en IPython 5.1. Se solucionó en esta solicitud de extracción y ya no es un problema de IPython 5.2 y posteriores. Ahora puede usar q , quit() o Ctrl + d para salir del depurador.