2013-02-26 58 views
6

我在C#应用程序中托管IronPython,并将主机的API注入全局范围。如何禁用文件中特定变量的pylint'未定义变量'错误?

我刚刚开始热爱syntastic vim与pylint检查我的脚本。但是我对注入变量的所有[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 
+1

这是一个[this]的副本(http://stackoverflow.com/questions/14233867/pylint-ignore-sp ecific-的名字)? – 2013-02-26 12:36:45

+0

很可能...除了这个问题没有得到任何好的答案。我认为@sthenault在这里有一个不错的指针。我们只需要修复他的答案,以包含一个链接到rc文件的文档,也许是一个例子。但它看起来可以工作! – 2013-02-28 07:54:57

+0

@DarenThomas这里的答案之一是否工作,或者您是否找到另一种解决方案? – 2013-08-02 06:08:39

回答

1

不变量,但你可以将其禁用对于具有var的线条。请参阅ref

5

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

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

5

代码禁用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的。

+0

Works;一个聪明的解决方法。 – 2017-01-05 17:22:59

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