Jak wyłączyć ostrzeżenie Pylint?

Próbuję wyłączyć warning C0321 ("więcej niż jedna instrukcja w jednej linii" -- często umieszczam if instrukcje z krótkimi wynikami w jednej linii na tej samej linii), w Pylint 0.21.1 (jeśli ma to znaczenie: astng 0.20.1, common 0.50.3, Python 2.6.6 (r266: 84292, Sep 15 2010, 16:22:56)).

Próbowałem dodać disable=C0321 do pliku konfiguracyjnego Pylint, ale Pylint i tak nalega, aby to zgłosić. Zmiany w tej linii (jak disable=0321 lub disable=C321) są oznaczane jako błędy, więc Pylint robi prawidłowo rozpoznaj tę opcję, po prostu ją ignoruj.

Czy to błąd Pylint, czy robię coś nie tak? Można to jakoś obejść? Naprawdę chciałbym pozbyć się tego hałasu.
 168
Author: A-B-B, 2010-12-03

9 answers

pylint --generate-rcfile pokazuje to tak:

[MESSAGES CONTROL]

# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time.
#enable=

# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
#disable=

Więc wygląda na to, że Twoje ~/.pylintrc powinno mieć disable= linię/y wewnątrz sekcji [MESSAGES CONTROL].

 103
Author: Chris Morgan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-03 02:00:52

Miałem ten problem używając Eclipse i rozwiązałem go w następujący sposób:

W folderze pylint (np. C:\Python26\Lib\site-packages\pylint) przytrzymaj shift, kliknij prawym przyciskiem myszy i wybierz polecenie windows w tym folderze. "Type": "content"]}

lint.py --generate-rcfile > standard.rc

Tworzy plik konfiguracyjny standard.rc. Otwórz go w notatniku i pod [MESSAGES CONTROL], odkomentuj disable= i dodaj ID wiadomości, które chcesz wyłączyć, np.:

disable=W0511, C0321

Zapisz plik i w Eclipse->window - > preferences->PyDev - > pylint, w polu arguments, "type": "content"]}

--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc
Teraz powinno zadziałać ...

Możesz również dodać komentarz na górze kodu, który będzie interpretowany przez pylint:

# pylint: disable=C0321

Link do wszystkich kody wiadomości pylint


Dodanie np. --disable-ids=C0321 w polu arguments nie działa. Wszystkie dostępne wiadomości pylint są przechowywane w słowniku _messages, atrybucie instancji klasy pylint.utils.MessagesHandlerMixIn. Podczas uruchamiania pylint z argumentem --disable-ids=... (przynajmniej bez pliku konfiguracyjnego), ten słownik jest początkowo pusty, powodując wyjątek KeyError w pylint (pylint.utils.MessagesHandlerMixIn.check_message_id(). W Eclipse ten Komunikat o błędzie można zobaczyć w konsoli Pylint (windows - show view-Console, poza ikoną konsoli w opcjach konsoli wybierz konsolę pylint console.)

 115
Author: Remi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-17 09:00:35

Począwszy od Pylint V. 0.25. 3, możesz używać symbolicznych nazw do wyłączania ostrzeżeń zamiast pamiętać wszystkie te numery kodu. Np.:

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long

Ten styl jest bardziej pouczający niż tajemnicze kody błędów, a także bardziej praktyczny, ponieważ nowsze wersje Pylint wypisują tylko symboliczną nazwę, a nie kod błędu.

Zgodność między nazwami symbolicznymi i kodami można znaleźć tutaj .

Komentarz wyłączony może być wstawiony we własnej linii, zastosowanie wyłączenia do wszystkiego, co następuje w tym samym bloku. Alternatywnie można go umieścić na końcu linii, dla której ma być stosowany.

Jeśli pylint wyświetla komunikaty" Locally disabling", możesz się ich pozbyć, włączając wyłącznik locally-disabled pierwszy jak w powyższym przykładzie.

 98
Author: imolit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-24 13:39:33

Aby wyłączyć ostrzeżenie lokalnie w bloku, dodaj

# pylint: disable=C0321

Do tego bloku.

 55
Author: thakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-26 18:28:22

Istnieje kilka sposobów na wyłączenie ostrzeżeń i błędów z Pylint. Który z nich ma związek z tym, jak globalnie lub lokalnie chcesz zastosować wyłączenie-ważna decyzja projektowa.

Wiele Podejść

  1. W Jednym lub kilku plikach pylintrc.

Dotyczy to więcej niż Pliku ~/.pylintrc (w katalogu $HOME) opisanego przez Chrisa Morgana. Pylint będzie wyszukiwać pliki rc, z pierwszeństwem, które wartościuje pliki "bliższe" więcej wysoko:

  • Plik {[1] } w bieżącym katalogu roboczym; lub

  • Jeśli bieżący katalog roboczy znajduje się w module Pythona( tzn. zawiera plik __init__.py), przeszukiwanie hierarchii modułów Pythona aż do znalezienia pliku pylintrc lub

  • Plik nazwany przez zmienną środowiskową PYLINTRC; or

  • Jeśli masz katalog domowy, który nie jest /root:

    • ~/.pylintrc; lub

    • ~/.config/pylintrc; lub

    • /etc/pylintrc

Zauważ, że większość z tych plików ma nazwę pylintrc - tylko plik w ~ ma kropkę wiodącą.

Do pliku pylintrc Dodaj linie, aby wyłączyć określone wiadomości pylint. Na przykład:

[MESSAGES CONTROL]
disable=locally-disabled
  1. Dalsze wyłączanie z linii poleceń pylint, zgodnie z opisem Aboo i Cairnarvon. To wygląda jak pylint --disable=bad-builtin. Powtórz --disable, aby usunąć dodatkowe elementy.

  2. Kolejne wyłączenia z poszczególne linie kodu Pythona, opisane przez Imolit. Wyglądają one jak some statement # pylint: disable=broad-except (dodatkowy komentarz na końcu oryginalnej linii źródłowej) i odnoszą się tylko do bieżącej linii . Moje podejście polega na tym, aby zawsze umieszczać je na końcu innych linii kodu, aby nie były mylone ze stylem blokowym, patrz poniżej.

  3. Dodatkowo wyłącza zdefiniowane dla większych bloków kodu Pythona, aż do kompletnych plików źródłowych.

    • Wyglądają jak # pragma pylint: disable=bad-whitespace (zwróć uwagę na klucz pragma word).

    • Te odnoszą się do każdej linii po pragmie. Umieszczenie ich na górze pliku powoduje, że tłumienie odnosi się do całego pliku. Umieszczenie tego samego bloku niżej w pliku powoduje, że stosuje się je tylko do linii następujących po bloku. Moje podejście polega na tym, aby zawsze umieszczać je na własnej linii, aby nie były mylone ze stylem jednowierszowym, patrz powyżej.

    • Gdy tłumienie powinno mieć zastosowanie tylko w zakresie kodu, użyj # pragma pylint: enable=bad-whitespace (teraz używanie enable Nie disable), aby przestać tłumić.

Należy zauważyć, że wyłączenie dla pojedynczej linii używa składni # pylint, podczas gdy wyłączenie dla tej linii dalej używa składni # pragma pylint. Są one łatwe do zmylenia, zwłaszcza podczas kopiowania i wklejania.

Składając Wszystko Razem

Zazwyczaj używam kombinacji tych podejść.

  • Używam ~/.pylintrc dla absolutnie globalnych standardów - bardzo niewielu z nich.

  • Używam poziom projektu pylintrc na różnych poziomach modułów Pythona, gdy istnieją standardy specyficzne dla projektu. Zwłaszcza, gdy przyjmujesz Kod od innej osoby lub zespołu, może się okazać, że używają oni konwencji, których nie preferujesz, ale nie chcesz go przerabiać. Utrzymanie ustawień na tym poziomie pomaga nie rozprzestrzeniać tych praktyk na inne projekty.

  • Używam pragmatów w stylu blokowym na górze pojedynczych plików źródłowych. Lubię wyłączać pragmy (przestań tłumić wiadomości) w ogniu rozwoju nawet dla standardów Pylint, z którymi się nie zgadzam (np. "zbyt mało publicznych metod" - zawsze dostaję to Ostrzeżenie Na niestandardowych klasach wyjątków) -- ale warto zobaczyć więcej / może wszystkie wiadomości Pylint podczas tworzenia. W ten sposób możesz znaleźć przypadki, które chcesz rozwiązać za pomocą pragmatów jednoliniowych (patrz poniżej), lub po prostu dodać komentarze dla następnego dewelopera, aby wyjaśnić, dlaczego ostrzeżenie jest w porządku w tym przypadku.

  • Zostawiam trochę stylu blokowego pragmas włączone nawet wtedy, gdy kod jest gotowy do zameldowania. Staram się użyć kilku z nich, ale gdy ma to sens dla modułu, można zrobić to jako dokumentację. Staram się jednak pozostawić jak najmniej, najlepiej żadnych.

  • Używam Stylu single-line-comment, aby rozwiązać szczególnie silne błędy. Na przykład, jeśli jest miejsce, w którym rzeczywiście ma sens robić except Exception as exc, umieszczam # pylint: disable=broad-except na tej linii zamiast bardziej globalnego podejścia, ponieważ jest to dziwny wyjątek i musi być wywołana, zasadniczo jako forma dokumentacji.


Jak Wszystko inne w Pythonie, możesz działać na różnych poziomach indrection. Radzę zastanowić się, co należy na jakim poziomie, aby nie skończyć z zbyt pobłażliwym podejściem do Pylint.

 54
Author: Chris Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-14 18:53:33

Możesz również użyć następującego polecenia:

pylint --disable=C0321  test.py

Moja wersja pylint to 0.25.1.

 10
Author: aboo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 04:28:55

To jest FAQ :

4.1 czy można lokalnie wyłączyć konkretną wiadomość?

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

Możesz wyłączyć wiadomości za pomocą kodu lub nazwy symbolicznej. Zobacz docs (lub uruchom pylint --list-msgs W Terminalu), aby uzyskać pełną listę pylint wiadomości.
Dokumenty zawierają również ładny przykład Jak korzystać z tej funkcji.

 6
Author: Eugene Yarmash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-09 14:35:40

Jeśli to komuś pomoże, jeśli używasz Visual Studio Code, oczekuje, że plik będzie w kodowaniu UTF8. Aby wygenerować plik, uruchomiłem pylint --generate-rcfile | out-file -encoding utf8 .pylintrc W PowerShell.

 2
Author: Elijah W. Gagne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-18 22:11:45

Składnia Pythona pozwala na więcej niż jedno polecenie w wierszu, oddzielone średnikiem (;). Jednak ograniczenie każdej linii do jednej instrukcji ułatwia człowiekowi podążanie za logiką programu podczas jej czytania.

Tak więc, innym sposobem rozwiązania tego problemu, jest zrozumienie, dlaczego wiadomość lint jest tam i nie umieścić więcej niż jedną wypowiedź na linii.

Tak, może być łatwiej napisać wiele instrukcji w wierszu, jednak pylint jest przeznaczony dla każdego innego czytelnika Twojego kodu nie tylko Ty.

 0
Author: hrf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 11:09:21