我制作了一个简单的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
将我的变量名称显示为Invalid name
。以这种方式命名变量是一种错误的编码约定。
答案 0 :(得分:51)
答案 1 :(得分:21)
编辑:正如其他人所提到的,pylint期望全局变量应该是大写的。如果警告真的打扰你,你可以通过在main()
- 函数中包装这样的小片段来绕过它们,然后使用if __name__ == "__main__"
- 约定。或者,如果您在意,可以修改pylint用于验证变量名称的正则表达式。
来自Pylint的developers。
在这种情况下,Pylint告诉我这些变量似乎是常量,应该都是大写的。这个规则实际上是一个命名约定,特定于创建Pylint的Logilab的人。这就是他们选择命名这些变量的方式。您也可以创建自己的内部命名约定,但出于本教程的目的,我们希望坚持PEP-8标准。在这种情况下,我声明的变量应遵循全部小写的约定。适当的规则是:“应匹配[a-z _] [a-z0-9 _] {2,30} $”。注意正则表达式中的小写字母(a-z与A-Z)
您可以通过运行来测试它:
pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' x.py
答案 2 :(得分:6)
这是因为在全局命名空间中声明了url_to_short
,并且pylint要求将全局变量(例如常量)命名为ALL_UPPERCASE
。
因此,它会检查您的变量名是否与用于全局变量的正则表达式匹配,即:(([A-Z_][A-Z0-9_]*)|(__.*__))$
(注意A-Z
范围)。因此Invalid name
错误。