Czy można zignorować jedną konkretną linię za pomocą pylinta?

150

Mam następujący wiersz w nagłówku:

import config.logging_settings

To faktycznie zmienia moje ustawienia logowania w Pythonie, ale pylint uważa, że ​​jest to nieużywany import. Nie chcę unused-importogólnie usuwać ostrzeżeń, więc czy można po prostu zignorować tę jedną konkretną linię?

Nie miałbym nic przeciwko, aby mieć .pylintrcdla tego projektu, więc odpowiedzi zmieniające plik konfiguracyjny będą akceptowane.

W przeciwnym razie coś takiego również zostanie docenione:

import config.logging_settings # pylint: disable-this-line-in-some-way
The Unfun Cat
źródło

Odpowiedzi:

227

Kontrola wiadomości Pylint jest udokumentowana w instrukcji Pylint :

Czy można lokalnie wyłączyć określoną wiadomość?

Tak, ta funkcja została dodana w Pylint 0.11. Można to zrobić, dodając
# pylint: disable=some-message,another-one
na żądanym poziomie bloku lub na końcu żądanej linii kodu

Możesz użyć kodu wiadomości lub nazw symbolicznych.

Na przykład

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

Podręcznik zawiera również dalsze przykłady .

Istnieje wiki, które dokumentuje wszystkie wiadomości pylint i ich kody.

jomo
źródło
Lubię flake8 s # noqa. Nie chcę widzieć tylu komentarzy w kodzie. # nolintbyłoby jeszcze jaśniejsze.
Nils Lindemann
61
import config.logging_settings # pylint: disable=W0611

To było proste i specyficzne dla tej linii.

Jak uprzejmie zaznaczył sthenault, możesz i powinieneś używać bardziej czytelnej formy:

import config.logging_settings # pylint: disable=unused-import
The Unfun Cat
źródło
Skąd masz ten wyraźny symbol wiadomości? Mój linter (ten w spyder) nie zgłasza tego, a wiki, do której link znajduje się w odpowiedzi jomo, również go nie wymienia.
Joooeey
Masz na myśli unused-import? Myślę, że mój linter dał mi ostrzeżenie, kiedy użyłem W0611, ale minęło> 3 lata, więc nie pamiętam: / Przepraszam
The Unfun Cat
4

Wierzę, że szukasz ...

import config.logging_settings  # @UnusedImport

Zwróć uwagę na podwójną spację przed komentarzem, aby uniknąć uderzenia w inne ostrzeżenia dotyczące formatowania.

Ponadto, w zależności od Twojego IDE (jeśli go używasz), prawdopodobnie istnieje możliwość dodania prawidłowej reguły ignorowania (np. Naciśnięcie Ctrl1podczas zaćmienia, gdy kursor jest nad ostrzeżeniem, automatycznie zasugeruje@UnusedImport

Podstawowy
źródło
2
Może to działać w przypadku niektórych IDE, ale nie działa w przypadku emacs/flycheck. Dzięki. Zachowaj odpowiedź, ponieważ może to pomóc komuś innemu.
The Unfun Cat
To nie działa podczas uruchamiania pylintlub flake8z wiersza poleceń.
Jacob Tomlinson
@JacobTomlinson Ciekawe, dzięki. To jest to, co Pydev akceptuje i miałem wrażenie, że pyclipse po prostu wyskoczył do pylinta. Musi być albo nieco dostosowany, albo może eclipse przetwarza te dyrektywy i blokuje wyjście.
Podstawowy
4

Sprawdź pliki w https://github.com/PyCQA/pylint/tree/master/pylint/checkers . Nie znalazłem lepszego sposobu na uzyskanie nazwy błędu z wiadomości niż użycie kombinacji Ctrl + F do tych plików lub skorzystanie z funkcji wyszukiwania na Github:

Jeśli komunikat brzmi „Brak nazwy ... w module ...”, użyj wyszukiwania:

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

Lub, aby uzyskać mniej wyników:

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

Github pokaże Ci:

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

Możesz wtedy:

from collections import Sequence # pylint: disable=no-name-in-module
loxaxs
źródło
1
możesz znaleźć je wszystkie w dokumentacji
Esteban
Dzięki, to znacznie lepsze niż przechodzenie przez źródło. Znalazłem jeszcze dwa lustra dla pylint doc. Najwyraźniej readthedoc jest oficjalnym lustrem. Drugi to pylint.org
loxaxs