Python 如何禁用文件中特定变量的pylint“未定义变量”错误?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15088938/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 13:18:45  来源:igfitidea点击:

How to disable pylint 'Undefined variable' error for a specific variable in a file?

pythonpylint

提问by Daren Thomas

I am hosting IronPython inside a C# application and injecting an API for the host into the global scope.

我在 C# 应用程序中托管 IronPython,并将主机的 API 注入全局范围。

I have just started to love syntasticfor vim with pylintfor checking my scripts. But I am getting annoyed by all the [E0602, method_name] Undefined variable 'variable_name'error messages for the injected variables.

我刚刚开始喜欢syntasticvimpylint来检查我的脚本。但是我[E0602, method_name] Undefined variable 'variable_name'对注入变量的所有错误消息感到恼火。

I am aware of using # pylint: disable=E0602to disable this error message, but I'd prefer not to cripple a really useful feature just for some specific variable names.

我知道使用# pylint: disable=E0602来禁用此错误消息,但我不希望仅针对某些特定变量名称削弱一个非常有用的功能。

How do you deal with this?

你如何处理这个问题?

Currently, I am doing this at the top of my script:

目前,我在脚本的顶部执行此操作:

try:
    host_object = getattr(__builtins__, 'host_object')
except AttributeError:
    pass # oops, run this script inside the host application!!

What I would really like to do is this:

我真正想做的是:

# pylint: declare=host_object, other_stuff

回答by f p

Not for variables, but you can disable it for the lines that have the var. See the ref.

不适用于变量,但您可以为具有 var 的行禁用它。请参阅参考

回答by sthenault

You can add your variables to the 'additional-builtins' option so pylint will consider them as defined.

您可以将变量添加到 'additional-builtins' 选项,以便 pylint 将它们视为已定义。

This has to be done in a rc file, it can't be done inlined in the code.

这必须在 rc 文件中完成,不能在代码中内联完成。

回答by Tobias Kienzler

There's good-names=host_object,other_stuffor additional-builtins=...for this, or for some advanced stuff you can modify the regex via variable-rgx.

good-names=host_object,other_stuffadditional-builtins=...为此,或者对于一些高级的东西,您可以通过variable-rgx.

回答by void

Disabling E0602 in the code:

在代码中禁用 E0602:

# make pylint think that it knows about 'injected_var' variable
injected_var = injected_var  # pylint:disable=invalid-name,used-before-assignment

Obviously, that needs to be done once per module, all occurrences of injected_varafter this line would be legal for pylint.

显然,这需要每个模块执行一次,injected_var此行之后的所有出现对于 pylint 都是合法的。

回答by Py_minion

I just faced this issue and I just added disable options in pylintrc file. In my case, I am working on a small script and some of pylint checks are a bit overkill. So I disabled Undefined Variable Error

我刚刚遇到了这个问题,我只是在 pylintrc 文件中添加了禁用选项。就我而言,我正在编写一个小脚本,并且一些 pylint 检查有点矫枉过正。所以我禁用了未定义变量错误

E: 32,40: Undefined variable 'description' (undefined-variable)

by

经过

disable=E0602, E0603

禁用=E0602,E0603

You can find the codes and meaning at: http://pylint-messages.wikidot.com/all-codes

您可以在以下位置找到代码和含义:http: //pylint-messages.wikidot.com/all-codes

My pylintrc file:

我的 pylintrc 文件:

# The format of this file isn't really documented; just use --generate-rcfile
[MASTER]
# Add <file or directory> to the black list. It should be a base name, not a
# path. You may set this option multiple times.
#
# dirname, then we'll need to expand the ignore features in pylint :/
ignore=.git,tools, etc
[MESSAGES CONTROL]
# NOTE(gus): This is a long list.  A number of these are important and
# should be re-enabled once the offending code is fixed (or marked
# with a local disable)
disable=E0602, E0603,
# "F" Fatal errors that prevent further processing
 import-error,
# "I" Informational noise
 locally-disabled,
# "E" Error for important programming issues (likely bugs)
 access-member-before-definition,
 no-member,
 no-method-argument,
 no-self-argument,
# "W" Warnings for stylistic problems or minor programming issues
 abstract-method,
 arguments-differ,
 attribute-defined-outside-init,
 bad-builtin,
 bad-indentation,
 broad-except,
 dangerous-default-value,
 deprecated-lambda,
 deprecated-module,
 duplicate-key,
 expression-not-assigned,
 fixme,
 global-statement,
 no-init,
 non-parent-init-called,
 not-callable,
 protected-access,
 redefined-builtin,
 redefined-outer-name,
 signature-differs,
 star-args,
 super-init-not-called,
 super-on-old-class,
 unpacking-non-sequence,
 unused-argument,
 unused-import,
# "C" Coding convention violations
 invalid-name,
 missing-docstring,
 superfluous-parens,
 bad-continuation,
 Undefined variable,
# "R" Refactor recommendations
 abstract-class-little-used,
 abstract-class-not-used,
 duplicate-code,
 interface-not-implemented,
 no-self-use,
 too-few-public-methods,
 too-many-ancestors,
 too-many-arguments,
 too-many-branches,
 too-many-instance-attributes,
 too-many-lines,
 too-many-locals,
 too-many-public-methods,
 too-many-return-statements,
 too-many-statements


[BASIC]
# Variable names can be 1 to 31 characters long, with lowercase and underscores
variable-rgx=[a-z_][a-z0-9_]{0,30}$

# Argument names can be 2 to 31 characters long, with lowercase and underscores
argument-rgx=[a-z_][a-z0-9_]{1,30}$

# Method names should be at least 3 characters long
# and be lowecased with underscores
method-rgx=([a-z_][a-z0-9_]{2,}|setUp|tearDown)$

# Module names matching vulcan-* are ok (files in bin/)
# module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(vulcan-[a-z0-9_-]+))$
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|([a-z0-9_-]+))$



# Don't require docstrings on tests.
no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$

[FORMAT]
# Maximum number of characters on a single line.
max-line-length=79

[VARIABLES]
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
# _ is used by our localization
additional-builtins=_

[CLASSES]
# List of interface methods to ignore, separated by a comma.
ignore-iface-methods=

[IMPORTS]
# Deprecated modules which should not be used, separated by a comma
deprecated-modules=
# should use openstack.common.jsonutils
 json

[TYPECHECK]
# List of module names for which member attributes should not be checked
ignored-modules=six.moves,_MovedItems

[REPORTS]
# Tells whether to display a full report or only the messages
reports=no

回答by luart

Actually, there is a way to disable pylint argues about the specific undefined variable(s)by specifying it in dummy-variables-rgx(or dummy-variablesin the older pylintversions). dummy-variablescontain _,dummyby default and overwritten with the user-specified values on pylintexecution:

其实,有一种方法来禁用pylint的论证一下具体的不确定变量(一个或多个)在其指定的虚拟变量- RGX(或哑变量在较老pylint的版本)。 默认情况下dummy-variables包含_,dummy并在pylint执行时被用户指定的值覆盖:

$ pylint --dummy-variables-rgx='(_+[a-zA-Z0-9]*?$)|dummy|host_object'

or for the older pylintversions:

或对于旧pylint版本:

$ pylint --dummy-variables='_,dummy,host_object'

Or in case of the pylintconfiguration for VSCode(User/Workspace Settingscan be opened by pressing Ctrl+ ,):

或者pylint对于VSCode的配置(User/Workspace Settings可以通过按Ctrl+打开,):

"python.linting.pylintArgs": [
    "--dummy-variables-rgx='(_+[a-zA-Z0-9]*?$)|dummy|qdict'"
]