78

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

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

阅读此答案后,我了解它为什么这样做:它认为变量是常量并应用常量正则表达式。但是,我不敢苟同:我认为这是一个变量。我如何告诉 PyLint,所以它不会抱怨?PyLint 如何确定它是变量还是常量 - 它只是将所有模块级变量视为常量吗?

4

6 回答 6

102
# pylint: disable-msg=C0103

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

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

较新版本的 pylint 将采用这条线

# pylint: disable=C0103
于 2009-12-11T01:17:24.090 回答
24

您还可以指定在您的 pylintrc 中始终允许的“好名字”的逗号分隔列表,例如:

[BASIC]
good-names=_log
于 2015-09-21T22:10:37.300 回答
19

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

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

if __name__ == '__main__':
    main()

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

于 2014-05-26T19:40:27.120 回答
12

在较新版本的 pylint 中,这条线现在是

# pylint: disable=C0103

启用消息很简单

# pylint: enable=C0103
于 2014-08-12T12:37:46.577 回答
3

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

# pylint: disable=C0103

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

# pylint: disable=I0011,C0103

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

于 2015-04-30T15:00:28.563 回答
2

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

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

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

disable=locally-disabled, locally-enabled
于 2014-09-04T00:02:50.097 回答