web-dev-qa-db-ja.com

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
17
user3313834

myprintの定義をmain()に移動することは、メッセージを抑制する1つの方法です。

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')のように、代わりにルートロガーを構成して使用できます。

19
Acumenus

問題は、モジュールレベルでmyprintを定義していることです。

Main内で定義した場合、pylintからこのエラーは発生しません。

2