Сообщение 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

Ответы

Ответ 1

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

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

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

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

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

[BASIC]
good-names=log

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

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

Ответ 2

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

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