如何在文件中禁用 pylint 对特定变量的 '未定义变量' 错误?
我在一个C#应用程序中使用IronPython,并把一个API注入到全局范围内。
我刚开始喜欢上在vim中使用syntastic
和pylint
来检查我的脚本。但是,我对那些关于注入变量的错误信息感到很烦,比如[E0602, method_name] 未定义的变量 'variable_name'
。
我知道可以用# pylint: disable=E0602
来关闭这个错误提示,但我不想为了某些特定的变量名而影响这个很有用的功能。
你们是怎么处理这个问题的呢?
目前,我在我的脚本顶部是这样做的:
try:
host_object = getattr(__builtins__, 'host_object')
except AttributeError:
pass # oops, run this script inside the host application!!
我其实更想这样做:
# pylint: declare=host_object, other_stuff
8 个回答
4
其实,有一种方法可以让pylint不再对特定的未定义变量发出警告,你只需要在dummy-variables-rgx中指定它(在旧版的pylint
中是dummy-variables)。dummy-variables
默认包含_,dummy
,在执行pylint
时可以用用户指定的值覆盖这些默认值:
$ pylint --dummy-variables-rgx='(_+[a-zA-Z0-9]*?$)|dummy|host_object'
对于旧版的pylint
,你可以这样做:
$ pylint --dummy-variables='_,dummy,host_object'
如果你在为VSCode配置pylint
(可以通过按Ctrl + ,打开User/Workspace Settings
):
"python.linting.pylintArgs": [
"--dummy-variables-rgx='(_+[a-zA-Z0-9]*?$)|dummy|qdict'"
]
11
在代码中禁用 E0602 的方法:
# make pylint think that it knows about 'injected_var' variable
injected_var = injected_var # pylint:disable=invalid-name,used-before-assignment
显然,这个操作每个模块只需要做一次,之后在这一行之后出现的所有 injected_var
都会被 pylint 认为是合法的。
13
你可以把你的变量添加到 'additional-builtins' 这个选项里,这样 pylint 就会把它们当作已经定义过的变量来处理。
这个操作需要在一个配置文件(rc 文件)里进行,不能直接写在代码里。