Pylint在输出中显示无效的variables名称

我做了一个简单的python脚本在网站上发布数据。

#Imports url_to_short = sys.argv[1] post_url = 'https://www.googleapis.com/urlshortener/v1/url' headers = {'Content-Type': 'application/json'} data = {'longUrl': url_to_short} post_data = json.dumps(data) req = urllib2.Request(post_url, post_data, headers) resp = urllib2.urlopen(req) if resp.getcode() == 200: content = json.loads(resp.read()) #Other stuff 

现在我想我们用pylint工具检查脚本的编码标准。

我的pylint输出如下:

 ************* Module post C: 1,0: Missing docstring C: 6,0: Invalid name "url_to_short" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) C: 8,0: Invalid name "post_url" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) C: 9,0: Invalid name "headers" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) # Other stuff 

现在,我的问题是为什么pylint显示我的variables名称为Invalid name 。 命名variables这种方式是错误的编码惯例。

我完整的pylint输出 。

由于你的代码不包含在一个类或函数中,它期望这些variables是常量 ,因此它们应该是大写的。

您可以阅读PEP8了解更多信息。

编辑:正如其他人所提到的,pylint期望全局variables应该是大写的。 如果警告真的打扰你,你可以通过在main()函数中包装这样的小片段来绕过它们,然后使用if __name__ == "__main__" __main__ if __name__ == "__main__"常规。 或者如果你在意,你可以修改pylint用于validationvariables名的正则expression式。

来自Pylint的开发者 。

在这种情况下,Pylint告诉我,这些variables似乎是常量,应该都是大写的。 这个规则实际上是一个命名约定,特定于Logilab创buildPylint的人。 这是他们select命名这些variables的方式。 您也可以创build自己的内部命名约定,但对于本教程的目的,我们要坚持PEP-8标准。 在这种情况下,我声明的variables应该遵循全部小写的约定。 适当的规则应该是这样的:“应该匹配[a-z _] [a-z0-9 _] {2,30} $”。 注意正则expression式中的小写字母(az与AZ)

您可以运行以下pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' x.py来testing它: pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' x.py

这是因为url_to_short是在全局名称空间中声明的,并且pylint需要将全局variables(例如常量)命名为ALL_UPPERCASE
因此它会检查你的variables名是否和全局variables的正则expression式相匹配,即: (([A-Z_][A-Z0-9_]*)|(__.*__))$ (注意AZ范围)。 因此, Invalid name错误。