Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
07 Июл 2023
2 мин
245

Ловля и логирование исключений в Python

Одной из распространённых проблем, с которой сталкиваются начинающие программисты на Python, является ловля исключений и их логирование. Рассмотрим

Одной из распространённых проблем, с которой сталкиваются начинающие программисты на 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.

Добавить комментарий