Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 285

365

Для того чтобы использовать отладчик, импортируйте модуль 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()