Come disattivare pylint ‘Undefined variable’ errore per una specifica variabile in un file?

Io sono di hosting IronPython all’interno di un’applicazione C# e l’iniezione di una API per l’host in ambito globale.

Ho appena iniziato ad amare syntastic per vim con pylint per il controllo del mio script. Ma io sono sempre infastidito da tutte le [E0602, method_name] Undefined variable 'variable_name' messaggi di errore per il iniettato variabili.

Io sono consapevole di utilizzare # pylint: disable=E0602 per disattivare questo messaggio di errore, ma io preferirei non paralizzare una caratteristica davvero utile solo per alcuni specifici nomi di variabili.

Come si fa a trattare con questo?

Attualmente, sto facendo questo, al mio script:

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

Quello che vorrei fare è questo:

# pylint: declare=host_object, other_stuff
  • Questo è un duplicato di questo?
  • molto probabilmente… tranne che di domande non risposte. Penso che @sthenault ha un bel puntatore qui. Abbiamo solo bisogno di fissare la sua risposta di includere un link al file rc documentazione e, forse, di un esempio. Ma sembra che potrebbe funzionare!
  • Ha fatto una delle risposte qui, il lavoro, o hai trovato un’altra soluzione?
  • più o meno. Sembra che non si può davvero fare questo, tranne che per la linea o in un file globale. Preferisco non accettare qualsiasi soluzione di sicurezza, ma con voto positivo di tutti.
  • Credo di aver letto da qualche parte nella documentazione che # pylint: ... dovrebbe agire ambito ampia, così all’inizio di un modulo dovrebbe funzionare, a meno che la memoria false o un bug…
  • È possibile ignorare tutti pylint controlli per la specifica variabile tramite il dummy-variables configurazione: stackoverflow.com/a/50118061/1814353

 

6 Replies
  1. 10

    È possibile aggiungere le variabili e altri-builtins’ opzione in modo pylint li consideriamo come definito.

    Questo deve essere fatto in un file rc, non può essere fatto inline nel codice.

  2. 8

    Disattivazione E0602 nel codice:

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

    Ovviamente, che deve essere fatto una volta per modulo, tutte le occorrenze di injected_var dopo questa riga dovrebbe essere legale per pylint.

    • Opere; una intelligente soluzione.
  3. 1

    Ho appena affrontato questo problema e ho appena aggiunto disattivare le opzioni in pylintrc file. Nel mio caso, sto lavorando su un piccolo script e alcune delle pylint i controlli sono un po ‘ eccessivo. Così ho disabilitato Undefined variable Errore

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

    da

    disattivare=E0602, E0603

    Si possono trovare i codici e significato: http://pylint-messages.wikidot.com/all-codes

    Mio pylintrc file:

    # 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
  4. 1

    In realtà, c’è un un modo per disattivare pylint sostiene circa la specifica variabile non definita(s), specificando in le variabili dummy-rgx (o le variabili dummy nei vecchi pylint versioni).
    dummy-variables contenere _,dummy per impostazione predefinita e sovrascritti con i valori specificati dall’utente sul pylint di esecuzione:

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

    o per i più grandi pylint versioni:

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

    O, in caso di pylint di configurazione per VSCode (User/Workspace Settings può essere aperto premendo Ctrl + ,):

    "python.linting.pylintArgs": [
        "--dummy-variables-rgx='(_+[a-zA-Z0-9]*?$)|dummy|qdict'"
    ]

Lascia un commento