Python Pylint在输出中显示无效的变量名

Python Pylint在输出中显示无效的变量名,python,pylint,Python,Pylint,我制作了一个简单的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.

我制作了一个简单的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
将我的变量名显示为
无效名
。这样命名变量是错误的编码约定吗


My.

由于您的代码不包含在类或函数中,因此它希望这些变量是大写的


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

这是因为
url\u to\u short
是在全局命名空间中声明的,pylint要求全局变量(例如常量)命名为
ALL\u大写


因此,它会检查您的变量名是否与用于全局变量的正则表达式匹配,即:
([A-Z][A-Z0-9.]*)|(uuz.*.uuz))$
(注意
A-Z
范围)。因此出现了
无效名称
错误。

编辑:正如其他人所提到的,pylint希望全局变量应该是大写的。如果警告真的让您感到困扰,您可以通过在
main()
-函数中包装这样的小片段,然后使用
If\uuuu name\uuuu==“\uuu main\uuu>-约定来绕过它们。或者,如果需要,可以修改pylint用于验证变量名的正则表达式

来自派林的

在本例中,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

更特别的是,PEP8I不会在类中编写它,我只会将它放在函数定义中,这也是代码重用的良好实践。PEP8不禁止全局变量。。。这样做是愚蠢的,因为python通常用于编写短脚本。这显然是pylint设置了PEP 8中不存在的限制的情况。@catphive pylint也不禁止它们,它只是要求它们遵循所有大写命名约定。@Kroltan在“全局变量”部分中,PEP 8说全局变量的格式应该像函数一样,所以所有大写都是错误的。我的猜测是,pylint很难检查变量是用作常量还是用作变量,因此它默认只允许模块级常量,因为全局变量通常不鼓励使用任何方式,您可以逐个禁用pylint。