Отладчик Python:без усилий улучшите свои навыки отладки
Отладка кода Python для многих из нас сводится к добавлению операторов печати и попытке понять, что происходит, на основе вывода. Это не идеально, но почему-то люди просто не хотят трогать отладчик Python.
Содержание
Использование печати для отладки кода
Если вы один из тех, кто использует print
для отладки я вас не осуждаю . Изучать Python сложно. Программировать тяжело. Жизнь тяжела. Я понимаю, что изучение еще одной вещи кажется утомительным, если вы уже боретесь. И добавить этот оператор печати в свой код… это просто проще. Небольшое признание:я до сих пор делаю это все время. Все не так плохо, как некоторые думают.
Сказав это, я собираюсь научить вас небольшому трюку, который будет так же прост, как добавление операторов печати в ваш код. Однако этот трюк дает вам бесконечные возможности отладки и позволит вам завоевать мир, если вам это нужно.
Установка точки останова отладчика Python
Вам не нужна IDE для правильной отладки кода. Этот трюк работает всегда, и в самом простом редакторе, и даже в Jupyter Notebooks.
Хитрость сводится к следующему:установка так называемой точки останова с помощью инструкции breakpoint()
. Вы можете вставить его в свой код, независимо от того, какой редактор или IDE вы используете, в том месте, где вы обычно вставляете этот надоедливый оператор печати.
Так что же происходит, когда вы это делаете? Давай выясним! Создайте простую программу, как показано ниже:
def add_two(x): return x + 2 for i in range(1, 10): a = add_two(i) breakpoint() print(a)
Когда вы запускаете это, и не имеет значения, делаете ли вы это в REPL, из командной строки или в своей IDE, вы попадаете в отладчик Python, который называется PDB. Но что теперь?
Использование отладчика Python
Когда я запускаю небольшую программу выше, происходит следующее:
$ python3 breakpointing.py > /home/erik/breakpointing.py(7)<module>() -> print(a) (Pdb)_
Здесь есть на что посмотреть:
- Показывает текущий запущенный файл (
breakpointing.py
) - После этого отображается следующая команда, которая должна была быть запущена, но была прервана вызовом
breakpoint()
. . - И, наконец, мы видим приглашение pdb, ожидающее нашего ввода.
Отладчик Python на самом деле представляет собой полностью функционирующую оболочку Python, как и REPL.
На этом этапе мы можем проверить текущую среду. Давайте посмотрим, какое значение a
прямо сейчас:
(Pdb) print(a) 3 (Pdb) print(i) 1
Вместо печати вы также можете использовать специфичную для pdb команду p, например:
(Pdb) p a 3 (Pdb_ p i 1
Переход к следующей строке
Так что, если мы хотим запустить следующую строку кода? Есть два варианта:
- С
s
илиstep
, вы выполняете текущую строку. Отладчик останавливается при первой возможности после этого. - С
n
илиnext
, вы также выполняете текущую строку, но теперь отладчик продолжает работу, пока не будет достигнута следующая строка текущей функции.
Чтобы было понятнее:step
счастливо входит в вызов функции и прерывается внутри этой функции. Напротив, next
выполняет функцию до тех пор, пока она не завершится, и прерывается на следующей строке.
Другие отладчики и IDE также называют это «шагом внутрь» (вместо «шаг») и «шагом через» (вместо «следующий»).
Теперь воспользуемся этими двумя:
$ python3 breakpointing.py -> print(a) (Pdb) s 3 -> for i in range(1, 10): (Pdb) s -> a = add_two(i) (Pdb) n -> breakpoint() (Pdb) n -> print(a) (Pdb) n 4 -> for i in range(1, 10): (Pdb) s -> a = add_two(i) (Pdb) s --Call-- -> def add_two(x): (Pdb) s -> return x + 2 (Pdb) s --Return-- 5 -> return x + 2 (Pdb) s -> breakpoint() (Pdb)
Как видите, сначала мы проходим через вызов add_two
. с n
. Во второй раз мы входим в функцию с s
.
Команды отладчика Python
Есть и другие команды, которые вы можете попробовать самостоятельно. Все перечислять не буду, только самые полезные:
h
(помощь):вывести все доступные команды. Также принимает аргумент, например.h c
сообщает вам, что такоеc
команда делаетc
(продолжить):начать работу до следующей точки остановаl
(список):список исходного кода вокруг текущей строки.p
:вывести результат следующего выражения. Вы можете использовать это вместо вызоваprint()
pp
:красивая печать, полезная для печати структур данных, таких как словари.- restart:перезапустить текущую программу
Для получения полной документации перейдите на страницу отладчика Python, где перечислены все команды.
Продолжайте учиться
Хотя это может оказаться очень удобным, стоит погрузиться в отладчик, который предлагает ваша IDE. Если вы являетесь пользователем VSCode, я написал руководство по отладке кода Python в VSCode.
Python
- Ввод, вывод и импорт Python
- Оператор Python Print():как печатать с примерами
- Строки Python:заменить, объединить, разделить, перевернуть, прописные и строчные буквы
- Python time.sleep():добавьте задержку в свой код (пример)
- Новая строка Python:как печатать БЕЗ новой строки в Python
- Подключенные автопарки улучшают вашу прибыль
- Как прототипы улучшают ваш производственный процесс
- 5 способов улучшить детали из листового металла
- 3 совета по улучшению плана технического обслуживания оборудования
- Советы и соображения:научитесь улучшать свои навыки проектирования печатных плат