«Объект 'NoneType' не имеет атрибута 'info' 'после вызова функции конфигурации регистрации - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу импортировать функцию logger logger_main (имя) из файла Logger.py в другой файл в том же каталоге / GeneralScripts.Каталог помечен как источник в PyCharm, а файл init .py также добавлен в /GeneralScripts.

Поэтому я импортирую его из GeneralScripts.Logger import logger_main

Логгер выглядит так:

def logger_main(name):
    for handler in logging.root.handlers[:]:
        logging.root.removeHandler(handler)
    logger = logging.basicConfig(filename='{}.log'.format(name),
                                 level=logging.INFO,
                                 format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
                                 datefmt='%Y-%m-%d:%H:%M:%S')
    return logger

И файл, в который я импортирую, выглядит так:

# import modules
import os
import pyodbc
from sqlalchemy import create_engine
import urllib
import json
from GeneralScripts.Logger import logger_main
import logging

# credentials
with open('cred_db', 'r') as file:
    cred_db = json.load(file)


# set the logger
logging = logger_main('DB')

def connect_to_db():
    """Connects to the database Controlling_Marketing.
    :return: engine instance
    """
    try:
        params = urllib.parse.quote_plus('DRIVER={driver};SERVER={server};DATABASE={database};UID={uid};PWD={pwd};Port={port};'.format(**cred_db))
        engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(params))
        logging.info('Connected to the DB Controlling_Marketing')
        return engine
    except Exception as e:
        logging.error("Exception occurred, check def connect_to_db", exc_info=True)

# run it
engine = connect_to_db()

Когда я запускаю его, возникают исключения

logging.info('Connected to the DB Controlling_Marketing')
AttributeError: 'NoneType' object has no attribute 'info'

logging.error("Exception occurred, check def connect_to_db", exc_info=True)
AttributeError: 'NoneType' object has no attribute 'error'

Я проверил импорт других функций, все работало нормально, проблема только с регистратором.Понятия не имею, почему

1 Ответ

1 голос
/ 20 сентября 2019

logging.basicConfig ничего не возвращает (технически это возвращает None).Поэтому возвращаемое значение logger_main равно None, что объясняет полученную ошибку.

У вас есть:

import logging
…
logging = logger_main('DB')  # now logging is None
…
logging.info('...')          # --> 'NoneType' has no attribute 'info'

Не присваивать результат logger_main('DB') до logging, так что logging по-прежнему ссылается на модуль ведения журнала при вызове logging.info:

import logging
…
logger_main('DB')    # do not assign
…
logging.info('...')  # now logging is the logging module
...