如何在文件中禁用 pylint 对特定变量的 '未定义变量' 错误?

23 投票
8 回答
47112 浏览
提问于 2025-04-17 17:10

我在一个C#应用程序中使用IronPython,并把一个API注入到全局范围内。

我刚开始喜欢上在vim中使用syntasticpylint来检查我的脚本。但是,我对那些关于注入变量的错误信息感到很烦,比如[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 文件)里进行,不能直接写在代码里。

撰写回答