【问题标题】:Pylint message: Invalid constant name (invalid-name)Pylint 消息:无效的常量名称(invalid-name)
【发布时间】:2016-01-09 04:18:00
【问题描述】:

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

【问题讨论】:

标签: python pylint


【解决方案1】:

myprint 的定义移动到main() 是抑制消息的一种方法。

根据 Pylint docs for 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。

    如果你在 main 中定义它,你不会从 pylint 得到这个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多