Сообщение Pylint: недопустимое имя константы (недопустимое имя)

Pylint жалуется на Invalid constant name "myprint" (invalid-name) в случае сокращения функции регистратора.

# import
from utils import get_logger
LOGFILE = '6_evaluator.log'
myprint = get_logger(LOGFILE)

def main():
    # some stuff
    myprint('log log')

if __name__ == '__main__':
    main()

Можно ли это сделать без настройки конфигурации pylint?

Если необходимо, вот определение get_logger:

import logging
import os

def get_logger(logfile):
    """ Return a logger that log on stdout and in LOGFILE"""
    if os.path.isfile('{}'.format(logfile)):
        os.remove('{}'.format(logfile))

    logging.basicConfig(filename='{}'.format(logfile), level=logging.INFO)
    logger = logging.getLogger('')
    logger.addHandler(logging.StreamHandler())
    myprint = logger.info

    myprint('log file at: {}'.format(logfile))
    myprint('Again Hello from logger')
    return myprint

person user3313834    schedule 11.10.2015    source источник
comment
Можете ли вы поделиться образцом файла журнала? Я хочу сделать тест.   -  person mertyildiran    schedule 11.10.2015
comment
Аналогичный вопрос и ответы: https://stackoverflow.com/questions/10815549/pylint-showing-invalid-variable-name-in-output   -  person Acumenus    schedule 09.10.2016


Ответы (2)


Перемещение определения myprint в main() - это один из способов подавить сообщение.

Согласно документации для invalid-name (C0103) Пилинта, имя константы должно фактически быть верхний регистр. Таким образом, имя MYPRINT не будет генерировать сообщение.

Если вы добавите к строке комментарий, как показано ниже, сообщение не должно создаваться.

log = get_logger()  # pylint: disable=locally-disabled, invalid-name

В качестве альтернативы добавьте следующее в .pylintrc для вашего проекта. Это мое предпочтительное решение.

[BASIC]
good-names=log

Если вы хотите, чтобы действительным был весь шаблон недопустимых имен (а не только одно имя), в противном случае вы можете настроить const-rgx и т. Д. В том же разделе. Обратитесь к странице pylint, ссылка на которую была сделана ранее.

Наконец, если ваше приложение небольшое и независимое, вы можете просто настроить и использовать вместо него корневой регистратор, например, с logging.warn('test').

person Acumenus    schedule 09.10.2016

Проблема в том, что вы определяете myprint на уровне модуля.

Если вы определите его в main, вы не получите эту ошибку от pylint.

person pettinato    schedule 23.06.2016