• en
  • Language: ru
  • Documentation version: latest

2. Отладка

Отладка - это то, освоение чего может значительно улучшить ваши навыки поиска ошибок. Большинство новичков пренебрегают важностью отладчика Python (pdb). В этом разделе я расскажу вам только о нескольких важных командах. Более подробно о нем вы можете узнать из официальной документации.

Запуск из командной строки

Вы можете запустить сценарий из командной строки с помощью отладчика Python. Вот пример:

$ python -m pdb my_script.py

Это заставит отладчик остановить выполнение на первом найденном утверждении. Это полезно, если ваш сценарий короткий. Затем вы можете проверить переменные и продолжить выполнение построчно.

Запуск изнутри сценария

Вы можете установить точки останова в самом сценарии, чтобы можно было проверять переменные и прочее в определенные моменты. Это возможно с помощью метода pdb.set_trace(). Вот пример:

import pdb

def make_bread():
    pdb.set_trace()
    return "I don't have time"

print(make_bread())

Попробуйте запустить приведенный выше сценарий после его сохранения. Сразу после выполнения вы попадете в отладчик. Теперь пришло время изучить некоторые команды отладчика.

Команды:

  • c: продолжить выполнение

  • w: показывает контекст текущей строки, которую он выполняет.

  • a: вывести список аргументов текущей функции

  • s: Выполнение текущей строки и остановка при первом возможном случае.

  • n: Продолжать выполнение до тех пор, пока не будет достигнута следующая строка в текущей функции или она не вернется.

Разница между next и step в том, что step останавливается внутри вызываемой функции, а next выполняет вызываемые функции на (почти) полной скорости, останавливаясь только на следующей строке в текущей функции.

Это лишь несколько команд. pdb также поддерживает функцию post mortem. Это очень удобная функция. Я бы очень советовал вам посмотреть официальную документацию и узнать о ней больше.

Примечание:

Использование pdb.set_trace() может показаться неинтуитивным, если вы новичок в этом деле. К счастью, если вы используете Python 3.7+, вы можете просто использовать breakpoint() [встроенную функцию](https://docs.python.org/3/library/functions.html#breakpoint). Она автоматически импортирует pdb и вызывает pdb.set_trace().