Нажмите "Enter" для перехода к содержанию

3 инструмента для отслеживания и визуализации выполнения кода на Python

0

Вы наверняка видели вывод ошибок наподобие показанного ниже:

и хотели, чтобы его было немного легче понять:

Возможно, вам даже захочется визуализировать, какие строки кода выполняются и сколько раз:

Если так, статья даст необходимые инструменты, чтобы достичь цели:

  • Loguru – вывод сработавших исключений;
  • snoop – печать строк кода, выполняемого в функции;
  • heartrate – визуализация выполнения программы в режиме реального времени.

Все, что нужно для использования этих инструментов – одна строка кода!

Loguru

Loguru – это библиотека, которая сделает общение с системой журналов в Python приятнее. Она предоставляет много интересных функций, но одна из них заслуживает отдельного внимания – возможность отлавливать неожиданные ошибки и отображать, какое значение переменной приводит к сбою кода.

Установить Loguru можно одной командой:

Чтобы понять, чем Loguru может быть вам полезна, представьте, что есть 2 функции – division и divide_numbers, при этом функция divide_numbers сейчас выполняется.

Обратите внимание, что комбинации ([2,1,0], 2) возвращают [(2, 1), (2, 0), (1, 0)]. После выполнения приведенного выше кода мы получим следующую ошибку:

Из выходных данных становится ясно, что возвращающая num1 / num2 строка является местом возникновения ошибки, но непонятно, какие значения num1 и num2 ее вызывают. Это можно легко отследить, добавив декоратор Loguru.catch:

Добавив logger.catch исключения гораздо проще понять: ошибка возникает при делении 2 на 0.

Snoop

Как быть, если в коде нет ошибки, но мы хотим выяснить, что в нем происходит? В этом случае пригодится snoop . Это пакет Python, который выводит на экран строки выполняемого кода вместе со значениями каждой переменной, добавляя только один декоратор.

Чтобы установить snoop, введите следующую команду:

Представим, что у нас есть функция под названием factorial, которая находит факториал целого числа:

Чтобы понять, почему результат factorial(5) равен 20, добавим декоратор snoop в функцию factorial.

В приведенном выше выводе можно просмотреть значения переменных, и какие строки кода выполняются. Теперь легче понять, как работает рекурсия.

Heartrate

Если необходимо визуализировать, какие строки и сколько раз выполняются, попробуйте heartrate.

H eartrate также создан разработчиками snoop. Чтобы его установить, введите команду:

Теперь добавим heartrate.trace(browser=True) в предыдущий код. Это откроет отображающее визуализацию файла окно браузера , в котором была вызвана функция trace():

При запуске приведенного выше кода должен открыться новый браузер. Если нет, перейдите на http://localhost:9999 – вы должны увидеть показанный ниже результат:

Диаграммы подсвечивают искомые строки: более длинные полосы означают больше попаданий, а светлые цвета – более свежее изменение.

На приведенной выше иллюстрации мы видим, как выполняется код:

  • if x==1 (5 раз)
  • return 1 (1 раз)
  • return (x * factorial(x-1)) (4 раза)

Вывод имеет смысл, так как начальное значение x равно 5, и функция вызывается повторно до тех пор, пока x не станет равным 1.

Теперь посмотрим, как визуализировать выполнение в режиме реального времени с помощью heartrate . Добавим sleep (0.5) , чтобы программа работала немного медленнее, и увеличим num до 20.

Теперь мы можем в режиме реального времени видеть, какие строки кода выполняются, и сколько раз отработала каждая из них.

Заключение

Мы изучили три инструмента для отслеживания и визуализации выполнения кода в Python. Надеемся, что с ними отладка станет для вас менее болезненной. Поскольку эти инструменты требуют только одной строки кода, почему бы не попробовать их в работе? Удачи в обучении!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *