Подтвердить что ты не робот

Каков правильный способ отладки в ноутбуке iPython?

Как я знаю,% debug magic может выполнять отладку в одной ячейке.

Однако у меня есть вызовы функций через несколько ячеек.

Например,

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

Что я пробовал:

  • Я попытался установить% debug в первой строке ячейки-1. Но он сразу же переходит в режим отладки, даже перед выполнением ячейки-2.

  • Я попытался добавить% debug в строку прямо перед кодом "return do_some_thing_about (b)". Но тогда код запускается вечно, никогда не останавливается.

Каков правильный способ установки точки прерывания в ноутбуке ipython?

4b9b3361

Ответ 1

Используйте ipdb

Установите его через

pip install ipdb

Использование:

In[1]: def fun1(a):
   def fun2(a):
       import ipdb; ipdb.set_trace() # debugging starts here
       return do_some_thing_about(b)
   return fun2(a)
In[2]: fun1(1)

Для выполнения строки за строкой используйте n и для перехода в функцию используйте s и для выхода из приглашения отладки используйте c.

Полный список доступных команд: http://frid.github.io/blog/2014/06/05/python-ipdb-cheatsheet/

Ответ 2

Вы можете использовать ipdb внутри jupyter с помощью:

from IPython.core.debugger import Tracer; Tracer()()


Изменить: перечисленные выше функции устарели с IPython 5.1. Это новый подход:

from IPython.core.debugger import set_trace

Добавьте set_trace(), где вам нужна точка останова. Введите help для команд ipdb, когда появится поле ввода.

Ответ 3

Ваша функция возврата находится в строке функции def (основная функция), вы должны дать ей одну вкладку. И используйте

%%debug 

вместо

%debug 

для отладки всей ячейки не только строки. Надеюсь, возможно, это поможет вам.

Ответ 4

Вы всегда можете добавить это в любую ячейку:

import pdb; pdb.set_trace()

и отладчик остановится на этой строке. Например:

In[1]: def fun1(a):
           def fun2(a):
               import pdb; pdb.set_trace() # debugging starts here
           return fun2(a)

In[2]: fun1(1)

Ответ 5

Просто введите import pdb в блокнот jupyter, а затем используйте cheatsheet для отладки. Это очень удобно.

c → continue, s → step, b 12 → установить точку прерывания в строке 12 и т.д.

Некоторые полезные ссылки: Официальный документ Python на pdb, Примеры отладчика python pdb для лучшего понимания того, как для использования команд отладчика.

Некоторые полезные скриншоты: введите описание изображения здесь введите описание изображения здесь