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

EMP*_*EMP 68 python pylint

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

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

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

Chr*_*heD 94

# pylint: disable-msg=C0103
Run Code Online (Sandbox Code Playgroud)

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

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

较新版本的pylint将取代此行

# pylint: disable=C0103
Run Code Online (Sandbox Code Playgroud)

  • 请注意,将它放在一行代码的末尾也应该只为此特定行禁用此消息(不需要重新启用). (15认同)
  • 谢谢.之后我还添加了`#pylint:enable-msg = C0103`,以便仍然检查其余的代码. (8认同)
  • 为了在所有Python源文件中禁用此错误消息,我将代码放在哪里? (2认同)

Ada*_*amR 23

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

[BASIC]
good-names=_log
Run Code Online (Sandbox Code Playgroud)


小智 15

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

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

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,如果你有一些有用的类,我可以导入它们而无需运行你的主.该__name__是模块的这样的"如果"失败.

  • 并非所有程序都是具有主要功能的脚本,例如Django urls.py文件。 (3认同)

stu*_*ioj 12

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

# pylint: disable=C0103
Run Code Online (Sandbox Code Playgroud)

启用消息很简单

# pylint: enable=C0103
Run Code Online (Sandbox Code Playgroud)