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
错误。