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

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.


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

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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.