Все секреты отладки в Jupyter
Проведем обзор инструментов отладки в Jupyter, которые предназначены для ускорения процесса изменения кода и быстрого поиска ошибок.
Интерактивная отладка
В этом поможет модуль pdb. Напишем с его помощью простые функции установки точки останова и отладки функции с заданными аргументами.
def debug(f, *args, **kwargs): import pdb return pdb.runcall(f, *args, **kwargs)
def set_trace(): import pdb;import sys pdb.set_trace(sys._getframe().f_back)
Теперь протестируем их применение на простенькой функции. Для установки точки останова внесите в произвольную строку ячейки код вызова set_trace:
Для отладки функции достаточно вызвать debug следующим образом:
Команды работы с отладчиком
c - продолжить выполнение кода
n - выполнить строку и перейти к другой
s - переместиться внутрь функции
q - выйти из отладчика
u - перемещение вверх по стеку вызовов
d - перемещение вниз по стеку вызовов
a - вывести аргументы функции
interact - вход в интерактивный режим
Для вывода значений переменных следует использовать перед их именами восклицательный знак, так как иногда они совпадают с командами:
Если вы захотите исполнить произвольную команду, то следует войти в интерактивный режим посредством исполнения - interact:
А вот для выхода из интерактивного режима потребуется использовать трюки).
А вот для выхода из интерактивного режима потребуется использовать трюки. В частности, потребуется передать оболочке сигнал окончания ввода, который имеет код \x04. Проще всего это сделать исполнив:
from pandas.io.clipboard import copy; copy("\x04")
а затем - ctrl+v:
Посмертная отладка
Полезная возможность в любой оболочке, исполняющейся в окружении, имеющем пакет IPython. После исключения набираем %debug и переходим в то место стека вызовов, где оно было возбуждено. Затем посредством u/d можно найти интересующий участок кода и дальше экспериментировать, имея доступ к объектам на момент "падения".
Также имеется магическая команда %pdb, которая устанавливает режим принудительного вызова отладчика после любого исключения.
Отладка без вмешательства в код
Если вы ограничитесь пошаговым выполнением кода и просмотром значений переменных простых типов, то вам достаточно установить пакет xeus-python.
Так как в Windows менеджер пакетов pip наотрез отказывался устанавливать его, пришлось создать conda окружение и сделать это посредством следующей команды:
conda install -c conda-forge xeus-python
Для применения отладчика потребуется выбрать ядро XPython и протянуть ползунок отладки в положение включения (средняя панель, правый верхний угол):