如何告诉PyLint“这是一个variables,而不是一个常量”来停止消息C0103?

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

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

读过这个答案,我明白为什么它这样做:它认为variables是一个常量,并应用不变的正则expression式。 不过,我不同意:我认为这是一个变数。 我如何告诉PyLint,所以它不抱怨? PyLint是如何确定它是一个variables还是一个常量 – 是否将所有模块级variables视为常量?

 # pylint: disable-msg=C0103 

把它放在你希望这些警告被忽略的范围内。 您也可以将上面的行结束注释,以禁用该行的代码的消息。

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

更新版本的pylint将采取这一行代替

 # pylint: disable=C0103 

你也可以指定一个逗号分隔的“好名字”列表,总是在你的pylintrc中允许的,例如:

 [BASIC] good-names=_log 

似乎对我来说重构可能有所帮助。 Pylint把这看作是一个模块,所以不要期望在这个层次上看到variables。 相反,它不会抱怨class级或职能上的变数。 下面的范例似乎很常见,解决了这个问题:

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

这有一个好处,如果你有一些有用的类,我可以导入它们而不运行你的主。 __name__是模块的名称,所以“if”失败。

在新版本的pylint中,现在是这行

 # pylint: disable=C0103 

启用消息是如此简单

 # pylint: enable=C0103 

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

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

如果你的意图是干净的lint运行,当然这应该是目标,否则为什么你打扰,那么你可以在你的configuration文件中禁用该消息和相应的本地启用消息:

 disable=locally-disabled, locally-enabled 

正如其他答案已经表明,您可以通过包括以下行禁用特定的PyLint警告(如C0103):

 # pylint: disable=C0103 

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

 # pylint: disable=I0011,C0103 

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