2013-02-26 8 views
6

Ich hosste IronPython in einer C# -Anwendung und injiziere eine API für den Host in den globalen Bereich.Wie pylint 'Undefinierte Variable' Fehler für eine bestimmte Variable in einer Datei zu deaktivieren?

Ich habe gerade angefangen zu lieben syntastic für vim mit pylint für die Überprüfung meiner Skripts. Aber ich ärgere mich über alle [E0602, method_name] Undefined variable 'variable_name' Fehlermeldungen für die injizierten Variablen.

Ich bin bewusst, zu verwenden, um diese Fehlermeldung zu deaktivieren, aber ich würde es vorziehen, ein wirklich nützliches Feature nur für einige bestimmte Variablennamen nicht zu verkrüppeln.

Wie gehen Sie damit um?

Derzeit bin ich das von meinem Skript an der Spitze zu tun:

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

Was würde ich wirklich tun möchte, ist dies:

# pylint: declare=host_object, other_stuff 
+1

Ist dies ein Duplikat von [this] (http://stackoverflow.com/questions/14233867/pylint-ignore-sp ecific-Namen)? –

+0

sehr wahrscheinlich ... außer dass diese Frage keine guten Antworten bekommen hat. Ich denke @sthenault hat hier einen schönen Zeiger. Wir müssen nur seine Antwort korrigieren, um einen Link zur RC-Datei-Dokumentation und vielleicht ein Beispiel zu enthalten. Aber es sieht so aus, als könnte es funktionieren! –

+0

@DarenThomas Hat eine der Antworten hier funktioniert, oder haben Sie eine andere Lösung gefunden? –

Antwort

1

Nicht für Variablen, aber Sie können es deaktivieren für die Zeilen, die die var. Siehe die ref.

5

Sie können Ihre Variablen zur Option 'additional-builtins' hinzufügen, damit pylint sie als definiert betrachtet.

Dies muss in einer RC-Datei durchgeführt werden, es kann nicht inline in den Code getan werden.

5

Deaktivieren E0602 im Code:

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

Offensichtlich, dass pro Modul einmal getan werden muss, alle Vorkommen von injected_var nach dieser Zeile würde für Pylint legal.

+0

Works; ein cleverer Workaround. –

1

Ich habe gerade dieses Problem konfrontiert, und ich habe gerade Optionen zum Deaktivieren in pyintrc Datei hinzugefügt. In meinem Fall arbeite ich an einem kleinen Skript und einige der Pylint Checks sind etwas übertrieben. Also habe ich deaktiviert undefinierte Variable Fehler

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

von

disable = E0602, E0603

Sie die Codes finden und Bedeutung bei: http://pylint-messages.wikidot.com/all-codes

Meine pylintrc Datei:

# 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