19

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

我刚刚开始喜欢syntastic用 vimpylint来检查我的脚本。但是我[E0602, method_name] Undefined variable '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
4

8 回答 8

12

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

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

于 2013-02-26T13:49:46.667 回答
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 都是合法的。

于 2016-03-04T16:41:33.027 回答
4

实际上,有一种方法可以通过在dummy-variables-rgx(或旧版本 中的dummy -variables )中指定特定的未定义变量来禁用 pylint 争论。默认包含并在执行时被用户指定的值覆盖:pylintdummy-variables_,dummypylint

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

或对于旧pylint版本:

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

或者如果是VSCodepylint的配置(可以通过按+打开):User/Workspace SettingsCtrl,

"python.linting.pylintArgs": [
    "--dummy-variables-rgx='(_+[a-zA-Z0-9]*?$)|dummy|qdict'"
]
于 2018-05-01T14:12:05.537 回答
3

good-names=host_object,other_stuffadditional-builtins=...为此,或者对于一些高级的东西,你可以通过修改正则表达式variable-rgx

于 2013-07-31T14:40:50.840 回答
2

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

于 2013-02-26T12:42:16.573 回答
1

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

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

经过

禁用=E0602,E0603

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

我的 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
于 2016-03-16T19:31:05.923 回答
1

把它贴在行尾,你就完成了:

# noqa 
于 2021-03-30T15:54:47.570 回答
0

dummy-variables-rgx没有为我做伎俩。我遇到了仅在集群上可用的包问题,而不是在本地开发时。我不得不使用“附加内置”设置,并将其添加到我的 .pylintrc 中。

additional-builtins: mssparkutils
于 2022-02-24T22:37:00.757 回答