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
How to disable pylint 'Undefined variable' error for a specific variable in a file?
提问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
回答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_stuff或additional-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'"
]

