如何告诉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!