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
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')
のように、代わりにルートロガーを構成して使用できます。
問題は、モジュールレベルでmyprintを定義していることです。
Main内で定義した場合、pylintからこのエラーは発生しません。