- 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
: Продолжать выполнение до тех пор, пока не будет достигнута следующая строка в текущей функции или она не вернется.
Разница между n
ext и s
tep в том, что 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().