Ich versuche, die Warnung C0321 ("mehr als eine Anweisung in einer einzelnen Zeile" - ich setze häufig if
Anweisungen mit kurzen einzeiligen Ergebnissen in dieselbe Zeile) in Pylint 0.21.1 zu deaktivieren (wenn es darauf ankommt: astng 0.20). 1, common 0.50.3, Python 2.6.6 (r266: 84292, 15. September 2010, 16:22:56)).
Ich habe versucht, disable=C0321
die Pylint-Konfigurationsdatei hinzuzufügen, aber Pylint besteht darauf, sie trotzdem zu melden. Variationen über diese Linie (wie disable=0321
oder disable=C321
) als Fehler markiert, so Pylint hat die Möglichkeit , richtig zu erkennen, es zu ignorieren es einfach.
Ist das ein Pylint-Fehler oder mache ich etwas falsch? Gibt es einen Weg daran vorbei? Ich würde wirklich gerne etwas von diesem Geräusch loswerden.
Antworten:
pylint --generate-rcfile
zeigt es so:Es sieht also so aus, als ob Sie
~/.pylintrc
diedisable=
Zeile (n) in einem Abschnitt haben sollten[MESSAGES CONTROL]
.quelle
~/.pylintrc
mit zwei Zeilen[MESSAGES CONTROL]
unddisable=C0321
. Das verhindert diese Nachricht.Ich hatte dieses Problem mit Eclipse und löste es wie folgt:
Halten Sie im Pylint-Ordner (z. B.
C:\Python26\Lib\site-packages\pylint
) die Umschalttaste gedrückt , klicken Sie mit der rechten Maustaste und wählen Sie, um den Windows-Befehl in diesem Ordner zu öffnen. Art:Dadurch wird die
standard.rc
Konfigurationsdatei erstellt. Öffnen Sie es im Editor und darunter[MESSAGES CONTROL]
, kommentieren Sie es ausdisable=
und fügen Sie die Nachrichten-IDs hinzu, die Sie deaktivieren möchten, z.Speichern Sie die Datei und geben Sie unter Eclipse-> Fenster-> Einstellungen-> PyDev-> Pylint im Feld Argumente Folgendes ein:
Jetzt sollte es funktionieren ...
Sie können auch oben in Ihrem Code einen Kommentar hinzufügen , der von pylint interpretiert wird:
Link zu allen Pylint-Nachrichtencodes
Das Hinzufügen von zB
--disable-ids=C0321
in das Argumentfeld funktioniert nicht. Alle verfügbaren Pylint-Nachrichten werden im Wörterbuch gespeichert_messages
, einem Attribut einer Instanz derpylint.utils.MessagesHandlerMixIn
Klasse. Wenn Sie pylint mit dem Argument ausführen--disable-ids=...
(zumindest ohne Konfigurationsdatei), ist dieses Wörterbuch zunächst leer, wodurch eine KeyError-Ausnahme innerhalb von pylint (ausgelöst wirdpylint.utils.MessagesHandlerMixIn.check_message_id()
. In Eclipse wird diese Fehlermeldung in der Pylint-Konsole angezeigt (Fenster - Ansicht anzeigen - Konsole) Wählen Sie neben dem Konsolensymbol aus den Konsolenoptionen die Option Pylint-Konsole aus.)quelle
Ab Pylint Version 0.25.3 können Sie die symbolischen Namen zum Deaktivieren von Warnungen verwenden, anstatt sich alle diese Codenummern merken zu müssen . Z.B:
Dieser Stil ist lehrreicher als kryptische Fehlercodes und auch praktischer, da neuere Versionen von Pylint nur den symbolischen Namen und nicht den Fehlercode ausgeben.
Die Entsprechung zwischen symbolischen Namen und Codes finden Sie hier .
Ein Deaktivierungskommentar kann in einer eigenen Zeile eingefügt werden, wobei die Deaktivierung auf alles angewendet wird, was im selben Block folgt. Alternativ kann es am Ende der Zeile eingefügt werden, für die es gelten soll.
Wenn Pylint Ausgänge „
Locally disabling
“ -Nachrichten, können Sie sie loswerden , indem die Sperrlocally-disabled
ersten wie im Beispiel oben.quelle
# pylint: disable=foo
wenn ich inlyne setze , bin ich zu lang, also muss ich jetzt hinzufügen, line-too-long
! Zunge in der Wange; Das war es, was ich brauchte und mein Problem löst. Vielen Dank!Fügen Sie hinzu, um eine Warnung lokal in einem Block zu deaktivieren
zu diesem Block.
quelle
[pylint] C0111: Missing method docstring
, daher ist es einfach, die Codenummer zu finden, aber wenn ich den symbolischen Namen finde, muss ich ihn nachschlagen.Es gibt verschiedene Möglichkeiten, Warnungen und Fehler von Pylint zu deaktivieren. Welche zu verwenden ist, hängt davon ab, wie global oder lokal Sie die Deaktivierung anwenden möchten - eine wichtige Entwurfsentscheidung.
Mehrere Ansätze
pylintrc
Dateien.Dies betrifft mehr als die
~/.pylintrc
von Chris Morgan beschriebene Datei (in Ihrem $ HOME-Verzeichnis). Pylint sucht nach RC-Dateien mit einer Priorität, die "nähere" Dateien höher bewertet:Eine
pylintrc
Datei im aktuellen Arbeitsverzeichnis; oderBefindet sich das aktuelle Arbeitsverzeichnis in einem Python-Modul (dh es enthält eine
__init__.py
Datei), durchsuchen Sie die Hierarchie der Python-Module, bis einepylintrc
Datei gefunden wurde. oderDie von der Umgebungsvariablen PYLINTRC benannte Datei; oder
Wenn Sie ein Home-Verzeichnis haben, das nicht
/root
:~/.pylintrc
;; oder~/.config/pylintrc
;; oder/etc/pylintrc
Beachten Sie, dass die meisten dieser Dateien benannt sind
pylintrc
- nur die Datei in~
hat einen führenden Punkt.pylintrc
Fügen Sie Ihrer Datei Zeilen hinzu, um bestimmte Pylint-Nachrichten zu deaktivieren. Zum Beispiel:Weitere Deaktivierungen über die
pylint
Befehlszeile, wie von Aboo und Cairnarvon beschrieben. Das sieht so auspylint --disable=bad-builtin
. Wiederholen Sie diesen Vorgang--disable
, um weitere Elemente zu unterdrücken.Weitere Deaktivierungen einzelner Python-Codezeilen, wie von Imolit beschrieben. Diese sehen aus wie
some statement # pylint: disable=broad-except
(zusätzlicher Kommentar am Ende der ursprünglichen Quellzeile) und gelten nur für die aktuelle Zeile . Mein Ansatz ist es, diese immer am Ende anderer Codezeilen zu platzieren, damit sie nicht mit dem Blockstil verwechselt werden (siehe unten).Weitere Deaktivierungen, die für größere Python-Codeblöcke definiert wurden, bis hin zur Vervollständigung der Quelldateien.
Diese sehen aus wie
# pragma pylint: disable=bad-whitespace
(beachten Sie daspragma
Schlüsselwort).Diese gelten für jede Zeile nach dem Pragma. Wenn Sie einen Block davon oben in eine Datei einfügen, werden die Unterdrückungen auf die gesamte Datei angewendet. Wenn Sie denselben Block tiefer in die Datei einfügen, gelten sie nur für Zeilen, die dem Block folgen. Mein Ansatz ist es, diese immer in eine eigene Zeile zu setzen, damit sie nicht mit dem einzeiligen Stil verwechselt werden (siehe oben).
Wenn eine Unterdrückung nur innerhalb eines Codebereichs angewendet werden soll, verwenden Sie
# pragma pylint: enable=bad-whitespace
(jetztenable
nichtdisable
), um die Unterdrückung zu beenden.Beachten Sie, dass beim Deaktivieren für eine einzelne Zeile die
# pylint
Syntax verwendet wird, während beim Deaktivieren für diese Zeile die Syntax verwendet wird# pragma pylint
Syntax verwendet wird. Diese sind besonders beim Kopieren und Einfügen leicht zu verwechseln.Alles zusammenfügen
Normalerweise verwende ich eine Mischung dieser Ansätze.
Ich verwende
~/.pylintrc
für absolut globale Standards - sehr wenige davon.Ich verwende Projektebene
pylintrc
auf verschiedenen Ebenen innerhalb von Python-Modulen, wenn es projektspezifische Standards gibt. Insbesondere wenn Sie Code von einer anderen Person oder einem anderen Team aufnehmen, werden möglicherweise Konventionen verwendet, die Sie nicht bevorzugen, die Sie jedoch nicht überarbeiten möchten. Wenn Sie die Einstellungen auf diesem Niveau halten, können Sie diese Vorgehensweisen nicht auf andere Projekte übertragen.Ich verwende die Blockstil-Pragmas oben in einzelnen Quelldateien. Ich mag es, die Pragmas in der Hitze der Entwicklung auszuschalten (keine Nachrichten mehr zu unterdrücken), selbst für Pylint-Standards, denen ich nicht zustimme (wie "zu wenige öffentliche Methoden" - ich bekomme diese Warnung immer bei benutzerdefinierten Ausnahmeklassen) - aber Es ist hilfreich, während der Entwicklung mehr / möglicherweise alle Pylint-Nachrichten anzuzeigen. Auf diese Weise können Sie die Fälle finden, die Sie mit einzeiligen Pragmas behandeln möchten (siehe unten), oder einfach Kommentare für den nächsten Entwickler hinzufügen, um zu erklären, warum diese Warnung in diesem Fall in Ordnung ist.
Ich lasse einige der Pragmas im Blockstil aktiviert, auch wenn der Code zum Einchecken bereit ist. Ich versuche, einige davon zu verwenden, aber wenn es für das Modul sinnvoll ist, ist es in Ordnung, dies als Dokumentation zu tun. Ich versuche jedoch, so wenig wie möglich zu belassen, vorzugsweise keine.
Ich verwende den einzeiligen Kommentarstil, um besonders starke Fehler zu beheben. Wenn es zum Beispiel einen Ort gibt, an dem es tatsächlich Sinn macht, dies zu tun
except Exception as exc
, setze ich# pylint: disable=broad-except
diesen Punkt anstelle eines globaleren Ansatzes ein, da dies eine seltsame Ausnahme darstellt und im Grunde genommen als Dokumentationsform aufgerufen werden muss.Wie alles andere in Python können Sie auf verschiedenen Indirektionsebenen agieren. Mein Rat ist, darüber nachzudenken, was auf welcher Ebene gehört, damit Sie nicht zu nachsichtig mit Pylint umgehen.
quelle
~/.pylintrc
. IMHO sollte die Konfiguration normalerweise an das Projekt gebunden sein und sich daher irgendwo im Projekt befinden. Nur dann kann es versioniert und mit dem Projekt geteilt werden. Andernfalls fehlen einem Klon möglicherweise die Anpassungen, die erforderlich sind, damit Pylint ohne Drucken von Nachrichten beendet wird.pragma
scheint völlig unnötig. Zum Beispiel habe ich# pylint: disable=missing-docstring
oben in meiner Datei, und es gilt für den gesamten Rest der Datei. Bitte überprüfen Sie daspragma
Präfix und entfernen Sie es aus Ihrer Antwort.Sie können auch den folgenden Befehl verwenden:
Meine Pylint-Version ist 0.25.1.
quelle
--py3k
Flagge zu funktionieren :(rc
es einwandfrei, wenn es in der Datei enthalten ist, und (beunruhigender) es generiert tatsächlich eine korrekterc
Datei mit--generate-rcfile
. Ich muss Code mit mehreren Zweigen lieben, die dasselbe tun :(Dies ist eine FAQ :
Sie können Nachrichten deaktivieren, indem Sie:
E1101
,E1102
usw.no-member
,undefined-variable
usw.pylint --list-groups
.C
,R
,W
etc.all
.Die vollständige Liste der Nachrichten finden Sie in den Dokumenten (oder
pylint --list-msgs
im Terminal ausführen )pylint
. Die Dokumente bieten auch ein schönes Beispiel für die Verwendung dieser Funktion.quelle
Sie müssen nur eine Zeile hinzufügen, um das zu deaktivieren, was Sie deaktivieren möchten. Z.B
Fügen Sie dies an # 1 in Ihrem Modul hinzu
quelle
Wenn dies jemandem hilft, wenn Sie Visual Studio Code verwenden, wird erwartet, dass die Datei in UTF8-Codierung vorliegt. Um die Datei zu generieren, habe ich
pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
in PowerShell ausgeführt.quelle
Wie pro Pylint Dokumentation, ist die einfachste diese verwenden Chart :
So kann man verwenden:
quelle
Die Python-Syntax erlaubt mehr als eine Anweisung in einer Zeile, die durch ein Semikolon (;) getrennt ist. Die Beschränkung jeder Zeile auf eine Anweisung erleichtert es einem Menschen jedoch, beim Lesen der Logik eines Programms zu folgen.
Eine andere Möglichkeit, dieses Problem zu lösen, besteht darin, zu verstehen, warum die Flusenmeldung vorhanden ist, und nicht mehr als eine Aussage in eine Zeile zu setzen.
Ja, es fällt Ihnen möglicherweise leichter, mehrere Anweisungen pro Zeile zu schreiben. Pylint gilt jedoch für jeden anderen Leser Ihres Codes, nicht nur für Sie.
quelle
Vielleicht möchten Sie dies versuchen:
Bearbeiten Sie "C: \ Benutzer \ Ihr Benutzer \ AppData \ Roaming \ Code \ Benutzer \ settings.json" und fügen Sie
python.linting.pylintArgs
am Ende Zeilen hinzu , wie unten gezeigt:quelle