如何告诉PyLint“这是变量,不是常量”以停止C0103警告?
我在我的Python 2.6程序中有一个模块级别的变量,叫做“_log”,但是PyLint对此表示不满:
C0103: Invalid name "_log" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
我看过这个回答,明白了它为什么这样做:PyLint认为这个变量是一个常量,所以使用了常量的规则。不过,我有不同的看法:我认为它是一个变量。我该怎么告诉PyLint,让它不再抱怨呢?PyLint是怎么判断一个是变量还是常量的?它是不是把所有模块级别的变量都当作常量处理?
6 个回答
20
我觉得稍微重构一下代码可能会有帮助。Pylint在检查这个模块时,不太会期待在这个层级看到变量。相反,它对类或函数中的变量是不会抱怨的。下面这种写法似乎很常见,并且解决了这个问题:
def main():
'''Entry point if called as an executable'''
_log = MyLog() # . . .
if __name__ == '__main__':
main()
这样做的好处是,如果你有一些有用的类,我可以在不运行你的主程序的情况下导入它们。__name__是模块的名字,所以“if”条件会失败。
24
你还可以在你的 pylintrc 文件中指定一个用逗号分隔的“好名字”列表,这些名字总是被允许的,比如:
[BASIC]
good-names=_log
112
# pylint: disable-msg=C0103
把它放在你想要忽略这些警告的范围内。你也可以把上面的内容放成行尾注释,这样就只会对那一行代码禁用这个消息。
如果我没记错的话,pylint会把所有模块级别的变量都当作“常量”来处理。
更新版本的pylint会使用这行代码。
# pylint: disable=C0103