Для того чтобы использовать отладчик, импортируйте модуль pdb из командной
строки, введя –m pdb, например, так:
$ python -m pdb capitals.py cities2.csv
> /Users/williamlubanovic/book/capitals.py(1)<module>()
-> def process_cities(filename):
(Pdb)
Это запустит программу и разместит вас на первой строке. Если вы введете
символ с (от слова continue — «продолжить»), программа будет работать, пока
не завершится либо естественным образом, либо из-за ошибки:
(Pdb) c
Buenos Aires,Argentina
La Paz,Bolivia
Brazilia,Brazil
Santiago,Chile
Bogotá,Colombia
The program finished and will be restarted
> /Users/williamlubanovic/book/capitals.py(1)<module>()
-> def process_cities(filename):
Программа завершилась нормально, точно так же, как и раньше, когда мы за-
пускали ее вне отладчика. Попробуем запустить ее снова, использовав специальные
команды, чтобы сузить место поиска проблемы. Похоже, имеет место логическая
ошибка, а не синтаксическая проблема или исключение (из-за них мы бы увидели
сообщение об ошибке).
Введите s (step — «шаг»), чтобы пройти по отдельным строкам кода. Это по-
зволит пройти по всем строкам — вашим, стандартной библиотеки и любых других
используемых вами модулей. Когда вы применяете команду s, вы также входите
во все функции и проходите каждую построчно. Введите n (next — «следующий»),
чтобы идти по шагам, но не заходить внутрь функций: когда вы находитесь на
строке, где вызывается функция, эта команда выполняет всю функцию и вы ока-
зываетесь на следующей строке. Используйте s, если вы не уверены в том, где
конкретно есть проблема, а n — если уверены, что некоторая функция проблем
не вызывает, особенно если это длинная функция. Зачастую вы будете проходить
построчно весь свой код и пропускать библиотечный, поскольку подразумевается,
что он хорошо протестирован. Мы используем s, чтобы начать двигаться от начала
программы к функции process_cities():
(Pdb) s
> /Users/williamlubanovic/book/capitals.py(12)<module>()
-> if __name__ == '__main__':
(Pdb) s
> /Users/williamlubanovic/book/capitals.py(13)<module>()
-> import sys
366
Глава 12. Быть питонщиком
(Pdb) s
> /Users/williamlubanovic/book/capitals.py(14)<module>()
-> process_cities(sys.argv[1])
(Pdb) s
--Call--
> /Users/williamlubanovic/book/capitals.py(1)process_cities()