Одной из распространённых проблем, с которой сталкиваются начинающие программисты на Python, является ловля исключений и их логирование. Рассмотрим пример. Пусть имеется следующий код, который выполняет загрузку файла на FTP-сервер:
import ftplib FTPADDR = "some ftp address" def upload_to_ftp(con, filepath): try: f = open(filepath,'rb') # file to send con.storbinary('STOR '+ filepath, f) # Send the file f.close() # Close file and FTP print('File successfully uploaded to '+ FTPADDR) except, e: print('Failed to upload to ftp: '+ str(e))
В этом коде используется блок try/except
для отлова исключений, которые могут возникнуть при работе с FTP-сервером. Когда возникает исключение, оно выводится на экран с помощью функции print()
. Однако, в реальных приложениях такой подход не всегда удобен. Часто требуется сохранять информацию об исключениях в файл для последующего анализа.
Логирование исключений с помощью модуля logging
Для решения этой задачи в Python предусмотрен специальный модуль logging
. С его помощью можно легко настроить вывод информации об исключениях в файл. Вот как можно изменить пример выше для использования logging
:
import ftplib import logging logger = logging.getLogger('ftpuploader') hdlr = logging.FileHandler('ftplog.log') formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.INFO) FTPADDR = "some ftp address" def upload_to_ftp(con, filepath): try: f = open(filepath,'rb') # file to send con.storbinary('STOR '+ filepath, f) # Send the file f.close() # Close file and FTP logger.info('File successfully uploaded to '+ FTPADDR) except Exception as e: logger.error('Failed to upload to ftp: '+ str(e))
Теперь, вместо вывода информации на экран, сообщения об успешной загрузке файла или об ошибке будут записываться в файл ftplog.log
.
Помимо этого, стоит обратить внимание на изменение в блоке except
. Вместо общей формы except, e
использована форма except Exception as e
, которая является более предпочтительной и устраняет возможные проблемы с синтаксисом.
Таким образом, с помощью модуля logging
можно легко и удобно логировать исключения в Python.
Добавить комментарий