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

Stanley,Falkland Islands

Cayenne,French Guiana

Georgetown,Guyana

Asunción,Paraguay

Lima,Peru

Paramaribo,Suriname

Montevideo,Uruguay

Caracas,Venezuela

Только что мы кратко рассмотрели отладчик — этого достаточно, чтобы показать

вам, что вы можете сделать и какие команды будете использовать большую часть

времени.

Помните: больше тестов — меньше отладки.

Записываем в журнал

сообщения об ошибках

В какой-то момент вам может понадобиться перейти от использования выраже-

ний print() к записи сообщений в журнал. Журнал, как правило, представляет

собой системный файл, в котором накапливаются сообщения, содержащие по-

лезную информацию вроде временной метки или имени пользователя, запустив-

шего программу. Зачастую журналы ежедневно ротируются (переименовыва-

ются) и сжимаются, благодаря чему они не переполняют ваш диск и не создают

проблем. Если у вашей программы что-то пошло не так, вы можете просмотреть

соответствующий файл журнала, чтобы увидеть, что произошло. Содержимое

исключений особенно полезно записывать в журнал, поскольку оно подсказывает

Записываем в журнал сообщения об ошибках

369

вам номер строки, после выполнения которой программа завершилась, и причину

такого завершения.

Для журналирования используется модуль стандартной библиотеки logging

(http://bit.ly/py-logging). Большинство его описаний я считаю немного непонятными.

Спустя некоторое время эти описания будут казаться осмысленными, но в первый

раз они выглядят чересчур сложными. Модуль logging содержит следующие кон-

цепции:

 сообщение, которое вы хотите сохранить в журнал;

 уровни приоритета и соответствующие функции — debug(), info(), warn(), error()

и critical();

 один или несколько объектов журналирования для основной связи с модулем;

 обработчики, которые направляют значение в терминал, файл, базу данных или

куда-нибудь еще;

 средства форматирования выходных данных;

 фильтры, которые принимают решения в зависимости от входных данных.

Рассмотрим простейший пример журналирования — просто импортируем мо-

дуль и воспользуемся некоторыми из его функций:

>>> import logging

>>> logging.debug("Looks like rain")

>>> logging.info("And hail")

>>> logging.warn("Did I hear thunder?")

WARNING:root:Did I hear thunder?

>>> logging.error("Was that lightning?")

ERROR:root:Was that lightning?

>>> logging.critical("Stop fencing and get inside!")