Que yo sé, %debug magic
puede depurar dentro de una celda.
Sin embargo, tengo llamadas a funciones en varias celdas.
Por ejemplo,
In[1]: def fun1(a)
def fun2(b)
# I want to set a breakpoint for the following line #
return do_some_thing_about(b)
return fun2(a)
In[2]: import multiprocessing as mp
pool=mp.Pool(processes=2)
results=pool.map(fun1, 1.0)
pool.close()
pool.join
Lo que probé:
Traté de establecer
%debug
en la primera línea de la celda 1. Pero entra en modo de depuración inmediatamente, incluso antes de ejecutar la celda 2.Traté de agregar
%debug
la línea justo antes del códigoreturn do_some_thing_about(b)
. Pero luego el código se ejecuta para siempre, nunca se detiene.
¿Cuál es la forma correcta de establecer un punto de interrupción dentro del cuaderno de ipython?
import ipdb; ipdb.set_trace()
dentro de una celda de un cuaderno diceMultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.
Puedes usar
ipdb
dentro de jupyter con:Editar : las funciones anteriores están en desuso desde IPython 5.1. Este es el nuevo enfoque:
Agregue
set_trace()
donde necesita un punto de interrupción. Tipohelp
deipdb
comandos cuando aparezca el campo de entrada.fuente
Tracer
fue depreciado Ahora funciona de esta manera:from IPython.core.debugger import set_trace
yset_trace()
evoca un punto de interrupción. Fuente: davidhamann.de/2017/04/22/debugging-jupyter-notebooksfrom IPython.core.debugger import set_trace;set_trace()
Su función de retorno está en línea con la función def (función principal), debe asignarle una pestaña. Y use
en vez de
para depurar toda la celda, no solo la línea. Espero, tal vez esto te ayude.
fuente
Siempre puede agregar esto en cualquier celda:
y el depurador se detendrá en esa línea. Por ejemplo:
fuente
ipdb
es un refactor de Python Debugger que está más estrechamente integrado con IPython.pdb
está construido en.ipdb
también se puede usar fuera del shell de ipython y viene con algunas comodidades, como completar pestañas.En Python 3.7 puede usar la función breakpoint () . Solo ingresa
donde quiera que se detenga el tiempo de ejecución y desde allí puede usar los mismos comandos pdb (r, c, n, ...) o evaluar sus variables.
fuente
Simplemente escriba
import pdb
jupyter notebook y luego use esta hoja de trucos para depurar. Es muy conveniente.c
-> continuar,s
-> paso,b 12
-> establecer el punto de interrupción en la línea 12 y así sucesivamente.fuente
pdb.set_trace()
donde quiero establecer un punto de interrupción, yab line_no
que no funciona en Jupyter Notebook y funciona bien en python IDLE.Después de obtener un error, en la siguiente celda simplemente ejecute
%debug
y listo.fuente
El
%pdb
comando mágico también es bueno para usar. Sólo decir%pdb on
y, posteriormente, elpdb
depurador se ejecutará en todas las excepciones, sin importar qué tan profundo en la pila de llamadas. Muy útil.Si tiene una línea en particular que desea depurar, simplemente plantee una excepción allí (¡a menudo ya lo está!) O use el
%debug
comando mágico que otras personas han estado sugiriendo.fuente
Acabo de descubrir PixieDebugger . Incluso aunque todavía no haya tenido tiempo de probarlo, realmente parece la forma más similar de depurar la forma en que se usa ipython con ipdb
También tiene una pestaña "evaluar"
fuente
Se está poniendo a disposición un depurador nativo como una extensión de JupyterLab. Lanzado hace unas semanas, esto se puede instalar obteniendo la extensión correspondiente, así como el núcleo xeus-python (que en particular viene sin la magia conocida por los usuarios de ipykernel):
Esto permite una experiencia de depuración visual bien conocida de otros IDE.
Fuente: un depurador visual para Jupyter
fuente