如何告诉PyLint“它是变量,而不是常量”来停止消息C0103?

时间:2009-12-11 01:15:53

标签: python pylint

我的Python 2.6程序中有一个名为“_log”的模块级变量,PyLint抱怨说:

C0103: Invalid name "_log" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

阅读this answer后,我理解为什么会这样做:它认为变量是常量并应用常量正则表达式。但是,我不同意:我认为这是一个变数。我怎么告诉PyLint,所以它没有抱怨? PyLint如何确定它是变量还是常量 - 它是否只将所有模块级变量视为常量?

6 个答案:

答案 0 :(得分:89)

# pylint: disable-msg=C0103

将其放在您希望忽略这些警告的范围内。您还可以将上述内容作为行尾注释,以仅为该行代码禁用该消息。

IIRC确实pylint将所有模块级变量解释为'常量'。

较新版本的pylint将取代此行

# pylint: disable=C0103

答案 1 :(得分:21)

您还可以指定逗号分隔的"名称"在你的pylintrc中总是允许的,例如:

[BASIC]
good-names=_log

答案 2 :(得分:16)

在我看来,一些重构可能有所帮助。 Pylint将此视为一个模块,因此不期望在此级别看到变量是合理的。相反,它并没有抱怨类或函数中的变量。以下范例似乎很常见,并解决了这个问题:

def main():
    '''Entry point if called as an executable'''
    _log = MyLog()  # . . .

if __name__ == '__main__':
    main()

这样做的好处是,如果您有一些有用的类,我可以在不运行main的情况下导入它们。 __ name __ 是模块的名称,因此" if"失败。

答案 3 :(得分:11)

在较新版本的pylint中,此行现在是

# pylint: disable=C0103

启用消息非常简单

# pylint: enable=C0103

答案 4 :(得分:3)

正如其他答案所示,您可以通过包含以下行来禁用特定的PyLint警告(例如C0103):

# pylint: disable=C0103

但这会生成Locally disabling invalid-name警告。请注意,如果要提醒已禁用警告,则此次要警告可能很有用。如果要在不更改配置文件的情况下静默禁用警告(这将全局禁用警告),您可以使用:

# pylint: disable=I0011,C0103

请注意,PyLint不会发出禁用I0011的警告!

答案 5 :(得分:2)

如果您在文件中本地禁用了一条消息,那么Pylint将报告另一个不同的警告!

Locally disabling invalid-name (C0103) [I:locally-disabled] 

如果您的目的是进行干净的lint运行,并且肯定应该是目标,否则您为什么要打扰,那么您可以在配置文件中禁用该消息和相应的本地启用消息:

disable=locally-disabled, locally-enabled