Python Pylint在输出中显示无效的变量名
我制作了一个简单的python脚本,在网站上发布数据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.
#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。