Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Мастерство отладки Python: эффективные техники и лучшие практики

Мастерство отладки Python: эффективные техники и лучшие практики

Отладка Python-кода для многих из нас сводится к добавлению print-выражений и попыткам понять, что происходит, основываясь на выводе. Это не идеально, но по какой-то причине люди просто не хотят трогать Python-отладчик.

Содержание

Использование print для отладки кода

Если вы из тех людей, кто использует print для отладки, я не осуждаю вас. Учиться Python — трудно. Программирование — трудно. Жизнь — трудно. Я понимаю, что изучение еще одной вещи кажется утомительным, если вы уже боретесь. И добавление этого print-выражения в ваш код… это просто легче. Небольшое признание: я всё ещё делаю это постоянно. Это не так плохо, как некоторые представляют.

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

Установка breakpoint в Python-отладчике

Вам не нужна IDE для правильной отладки кода. Этот трюк всегда работает, даже в самом простом редакторе, и даже в Jupyter Notebooks.

Трюк сводится к этому: установке так называемого breakpoint с помощью инструкции breakpoint(). Вы можете вставить его в свой код, независимо от того, какой редактор или IDE вы используете, в той точке, где вы обычно ставили бы то хлопотное print-выражение.

Что происходит, когда вы это делаете? Давайте узнаем! Создайте простую программу, как ниже:

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)_

Есть несколько вещей, которые здесь видны:

Python-отладчик на самом деле является полностью функционирующей Python-оболочкой, как REPL.

В этой точке мы можем инспектировать текущее окружение. Давайте посмотрим, каково значение a прямо сейчас:

(Pdb) print(a)
3
(Pdb) print(i)
1

Вместо print можно также использовать специфичную для pdb команду p, так:

(Pdb) p a
3
(Pdb) p i
1

Выполнение следующей строки

Что, если мы хотим выполнить следующую строку кода? Есть два варианта:

Чтобы сделать это понятнее: step с радостью входит в вызов функции и останавливается внутри этой функции. В отличие от этого, next выполняет функцию до её возврата и останавливается на следующей строке.

Другие отладчики и IDE также называют это «step into» (вместо step) и «step over» (вместо next).

Теперь давайте используем эти два:

$ 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)

Как вы видите, мы сначала делаем step over вызова add_two с n. Во второй раз мы делаем step into функцию с s.

Команды Python-отладчика

Есть больше команд, которые вы можете попробовать сами. Я не перечислю все, только самые полезные:

Для полной документации перейдите на страницу Python-отладчика, где перечислены все команды.

Продолжайте учиться

Хотя это может быть супер полезным, стоит погрузиться в отладчик, который предлагает ваша IDE. Если вы пользователь VSCode, я написал руководство по отладке Python-кода в VSCode.

Мастерство отладки Python: эффективные техники и лучшие практики

Python

  1. Мастерство ввода-вывода и импорта модулей в Python: Практическое руководство
  2. Функция print() в Python: практическое руководство с примерами
  3. Освоение строковых операций в Python: replace, join, split, reverse, преобразование регистра
  4. Python time.sleep(): как добавить задержки в код (пример)
  5. Печать в Python без перевода строки: мастерство параметра end и другие техники
  6. Максимизация прибыли с расширенным управлением коннектед флотом Ford
  7. Ускорьте производство: Как прототипирование улучшает ваш производственный процесс
  8. 5 проверенных стратегий повышения качества деталей из листового металла
  9. 3 проверенные стратегии улучшения плана ТО промышленного оборудования
  10. Мастерство дизайна ПП: необходимые советы и лучшие практики для инженеров