2013-02-26 5 views
6

Prowadzę IronPython wewnątrz aplikacji C# i wstrzykuję API dla hosta w zakres globalny.Jak wyłączyć błąd "Niezdefiniowana zmienna" dla konkretnej zmiennej w pliku?

Właśnie zacząłem kochać syntastic dla vima z pylint do sprawdzania moich skryptów. Ale denerwują mnie wszystkie komunikaty o błędach [E0602, method_name] Undefined variable 'variable_name' dla wprowadzonych zmiennych.

Jestem świadomy używania # pylint: disable=E0602, aby wyłączyć ten komunikat o błędzie, ale wolałbym nie okaleczyć naprawdę użytecznej funkcji tylko dla niektórych konkretnych nazw zmiennych.

Jak sobie z tym poradzić?

Obecnie robie to na szczycie mojego skryptu:

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

Co naprawdę chciałbym zrobić to w ten sposób:

# pylint: declare=host_object, other_stuff 
+1

Czy jest to duplikat [tego] (http://stackoverflow.com/questions/14233867/pylint-ignore-sp nazwy ekologiczne)? –

+0

całkiem możliwe ... z wyjątkiem tego, że pytanie nie dostarczyło żadnych dobrych odpowiedzi. Myślę, że @sthenault ma ładny wskaźnik tutaj. Musimy tylko poprawić jego odpowiedź, dołączając link do dokumentacji pliku rc i być może przykład. Ale wygląda na to, że to może zadziałać! –

+0

@DarenThomas Czy jedna z odpowiedzi tutaj działała, czy też znalazłeś inne rozwiązanie? –

Odpowiedz

1

Nie dla zmiennych, ale można ją wyłączyć dla linii, które mają var. Zobacz ref.

5

Możesz dodać swoje zmienne do opcji "dodatkowe-wbudowane", aby pylint uznał je za zdefiniowane.

To musi być wykonane w pliku rc, nie można tego zrobić w kodzie.

5

Wyłączenie E0602 w kodzie:

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

Oczywiście, że należy zrobić raz na moduł, wszystkie wystąpienia injected_var po tej linii byłoby prawną pylint.

+0

Działa; sprytne obejście. –

1

Właśnie napotkałem ten problem i właśnie dodałem opcję wyłączenia w pliku pylintrc. W moim przypadku pracuję nad małym skryptem, a niektóre kontrole pylinowe są nieco przesadzone. Więc wyłączone Undefined zmiennej Błąd

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

przez

Disable = E0602, E0603

można znaleźć kody i znaczenie pod adresem: http://pylint-messages.wikidot.com/all-codes

Mój plik 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