È possibile ignorare una singola riga specifica con pylint?


150

Ho la seguente riga nella mia intestazione:

import config.logging_settings

Questo in realtà cambia le mie impostazioni di registrazione di Python, ma Pylint pensa che sia un'importazione inutilizzata. Non voglio rimuovere gli unused-importavvisi in generale, quindi è possibile ignorare questa riga specifica?

Non mi dispiacerebbe avere un .pylintrcper questo progetto, quindi le risposte che cambiano un file di configurazione saranno accettate.

Altrimenti, qualcosa di simile sarà apprezzato anche:

import config.logging_settings # pylint: disable-this-line-in-some-way

Risposte:


228

Il controllo dei messaggi Pylint è documentato nel manuale Pylint :

È possibile disabilitare localmente un determinato messaggio?

Sì, questa funzione è stata aggiunta in Pylint 0.11. Questo può essere fatto aggiungendo
# pylint: disable=some-message,another-one
al livello di blocco desiderato o alla fine della riga di codice desiderata

È possibile utilizzare il codice messaggio o i nomi simbolici.

Per esempio

def test():
    # Disable all the no-member violations in this function
    # pylint: disable=no-member
    ...
global VAR # pylint: disable=global-statement

Il manuale contiene anche altri esempi .

C'è una wiki che documenta tutti i messaggi Pylint e i loro codici.


Mi piacciono i flake8 s # noqa. Non voglio vedere tanti commenti nel codice. # nolintsarebbe ancora più chiaro.
Nils Lindemann,

61
import config.logging_settings # pylint: disable=W0611

Era semplice ed è specifico per quella linea.

Come ha gentilmente sottolineato Sthenault, puoi e dovresti usare il modulo più leggibile:

import config.logging_settings # pylint: disable=unused-import

Da dove viene visualizzato il simbolo esplicito del messaggio? La mia linter (quella in spyder) non lo riporta e il wiki collegato nella risposta di jomo non lo elenca neanche.
Joooeey,

Intendi unused-import? Penso che la mia linter mi abbia dato un avvertimento quando ho usato W0611, ma è stato> 3 anni, quindi non ricordo: / Mi dispiace
The Unfun Cat

4

Credo che quello che stai cercando sia ...

import config.logging_settings  # @UnusedImport

Nota il doppio spazio prima del commento per evitare di colpire altri avvisi di formattazione.

Inoltre, a seconda del tuo IDE (se ne stai usando uno), probabilmente c'è un'opzione per aggiungere la regola ignora corretta (ad esempio premendo eclissi Ctrl1mentre il cursore si trova sopra l'avvertimento suggerirà automaticamente@UnusedImport


2
Questo potrebbe funzionare per alcuni IDE, ma non per emacs/flycheck. Grazie. Conservare la risposta poiché potrebbe aiutare qualcun altro.
The Unfun Cat

Questo non funziona durante l'esecuzione pylinto flake8dalla riga di comando.
Jacob Tomlinson,

@JacobTomlinson Interessante, grazie. È ciò che Pydev accetta e io avevo l'impressione che la pyclipse semplicemente sbandasse verso il pilastro. Deve essere leggermente personalizzato o forse eclissi sta elaborando quelle direttive e sopprimendo l'output.
Base

4

Controlla i file in https://github.com/PyCQA/pylint/tree/master/pylint/checkers . Non ho trovato un modo migliore per ottenere il nome dell'errore da un messaggio rispetto a Ctrl + F-ing quei file o usando la funzione di ricerca di Github:

Se il messaggio è "Nessun nome ... nel modulo ...", utilizzare la ricerca:

No name %r in module %r repo:PyCQA/pylint/tree/master path:/pylint/checkers

Oppure, per ottenere meno risultati:

"No name %r in module %r" repo:PyCQA/pylint/tree/master path:/pylint/checkers

Github ti mostrerà:

"E0611": (
    "No name %r in module %r",
    "no-name-in-module",
    "Used when a name cannot be found in a module.",

È quindi possibile fare:

from collections import Sequence # pylint: disable=no-name-in-module

1
puoi trovarli tutti nei documenti
Esteban

Grazie, è molto meglio che consultare la fonte. Ho trovato altri due mirror per il documento Pylint. Apparentemente, readthedoc è lo specchio ufficiale. L'altro è pylint.org
loxaxs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.