Pylint deaktiviert alle Warnungen für eine Datei

83

Wir verwenden Pylint in unserem Build-System. Wir haben ein Python-Paket in unserer Codebasis, das Wegwerfcode enthält, und ich möchte alle Warnungen für ein Modul vorübergehend deaktivieren, damit ich die anderen Entwickler nicht mehr mit diesen überflüssigen Nachrichten nerven kann. Gibt es eine einfache Möglichkeit, pylint: disablealle Warnungen für ein Modul zu erhalten?

mvanveen
quelle

Antworten:

114

Aus den PyLint-FAQ

Mit Pylint <0,25 addieren

# pylint: disable-all

am Anfang des Moduls.

Pylint 0.26.1 und höher haben diese Richtlinie in umbenannt

# pylint: skip-file

(Die erste Version wird jedoch aus Gründen der Abwärtskompatibilität beibehalten).

Um das Auffinden der ignorierten Module zu erleichtern, wird eine Nachricht I0013 auf Informationsebene ausgegeben. Bei neueren Versionen von Pylint wird bei Verwendung der alten Syntax eine zusätzliche I0014-Nachricht ausgegeben.

enderskill
quelle
1
Hinweis: Dadurch werden alle Warnungen und Fehler deaktiviert . Wenn Sie nach einer Möglichkeit suchen, nur Warnungen zu deaktivieren , lesen Sie meine Antwort auf dieser Seite.
Essstifte
27

PyLint hat fünf "Kategorien" für Nachrichten (von denen ich weiß).

Diese Kategorien waren in der Vergangenheit sehr offensichtlich, aber die nummerierten Pylint-Nachrichten wurden jetzt durch Namen ersetzt. Zum Beispiel C0302ist jetzt too-many-lines. Aber das 'C' sagt uns, dass dies too-many-lineseine Konventionsbotschaft ist . Dies ist verwirrend, da Konventionsnachrichten häufig nur als Warnung angezeigt werden , da viele Systeme (z. B. Syntastic ) alles entweder als Warnung oder als Fehler zu klassifizieren scheinen. Der PyLint-Bericht unterteilt die Dinge jedoch immer noch in diese Kategorien, sodass er definitiv unterstützt wird.

Ihre Frage bezieht sich speziell auf Warnungen , und alle Namen der PyLint- Warnmeldungen beginnen mit 'W'.

Es war ein bisschen schwierig für mich, dies aufzuspüren, aber diese Antwort führte mich schließlich zu der Antwort. PyLint unterstützt weiterhin das Deaktivieren ganzer Kategorien von Nachrichten. Um alle Warnungen zu deaktivieren , gehen Sie wie folgt vor:

disable=W

Dies kann über die Befehlszeile verwendet werden:

$ pylint --disable=W myfile.py

Oder Sie können es in Ihre pylintrc-Datei einfügen:

[MESSAGES CONTROL]
disable=W

Hinweis: Möglicherweise haben Sie die disableOption bereits in Ihrer RC-Datei. In diesem Fall sollten Sie das 'W' an diese Liste anhängen.

Oder Sie können es in Ihren Code einfügen, wo es für den Bereich funktioniert, in dem es platziert wird:

# pylint: disable=W

Um es für eine ganze Datei zu deaktivieren, platzieren Sie es am besten ganz oben in der Datei. Selbst ganz oben in der Datei stellte ich fest, dass ich immer noch die trailing-newlinesWarnmeldung erhielt (technisch gesehen eine Konventionswarnung , aber ich komme dazu).

In meinem Fall hatte ich eine Bibliothek, die von jemandem vor langer Zeit geschrieben wurde. Es funktionierte gut, so dass ich mich wirklich nicht um moderne Python-Konventionen usw. kümmern musste. Alles, was mich wirklich interessierte, waren die Fehler, die wahrscheinlich meinen Code beschädigen würden.

Meine Lösung bestand darin, alle Warn- , Konventions- und Refactoring- Meldungen für diese eine Datei nur zu deaktivieren , indem Sie den folgenden PyLint-Befehl in die erste Zeile setzen:

# pylint: disable=W,C,R

Abgesehen von der oben genannten Nachricht für nachfolgende Zeilenumbrüche hat dies genau das getan, was ich brauchte.

Essstifte
quelle
14

Ja, Sie können angeben # pylint: skip-file, aber es wird empfohlen, alle Warnungen für eine Datei zu deaktivieren. Wegwerfcode sollte nicht in einem Zweig vorhanden sein, der von Pylint analysiert wird.

Wenn Sie nur bestimmte Warnungen deaktivieren möchten, können Sie dazu einen Kommentar hinzufügen # pylint: disable=message-name, um die angegebene Nachricht für den Rest der Datei zu deaktivieren, oder zumindest bis # pylint: enable=message-name.

Beispiel:

# pylint: disable=no-member
class C123:
    def __init__(self):
        self.foo_x = self.bar_x
# pylint: enable=no-member

class C456:
    def __init__(self):
        self.foo_x = self.bar_x
Scharfsinn
quelle
Um zu vermeiden, dass eine bestimmte Warnung wie diese deaktiviert wurde, disable=locally-disabledkann sie dem pylintrc hinzugefügt werden.
ColonelFazackerley
@ColonelFazackerley Ja, aber an diesem Punkt ist es sinnvoll, eine pylintrcDatei für Ihr Projekt zu haben. Ein Beispiel ist hier .
Acumenus
6

Eine andere Option ist die Verwendung der --ignoreBefehlszeilenoption, um die Analyse für einige Dateien zu überspringen.

sthenault
quelle
0

Mein Anwendungsfall besteht darin pylint *.py, alle Dateien in einem Verzeichnis zu verarbeiten, außer dass ich eine bestimmte Datei überspringen möchte.

Das Hinzufügen #pylint: skip-fileführte dazu, dass Pylint fehlschlug I: 8, 0: Ignoring entire file (file-ignored). Das Hinzufügen #pylint: disable=file-ignoredbehebt das nicht. Vermutlich handelt es sich eher um einen globalen als um einen dateispezifischen Fehler.

Die Lösung bestand darin, --disable=file-ignoredOptionen in den Pylint-Befehl aufzunehmen. Es dauerte viel zu lange, um das herauszufinden; Es sollte kein file-ignoredFehler auftreten, wenn Sie eine Datei explizit ignorieren.

Curt
quelle
1
Im Idealfall sollten Sie es in eine pylintrcKonfigurationsdatei und nicht in eine Befehlsoption einfügen.
Acumenus