Więc pracuję nad projektem w Pythonie i staram się utrzymać go do standardów z pilintem i na ogół. Mam więc plik źródłowy (po prostu nazwimy to A.py)

#a.py
import loggingsetup

def foo():
   log.info("This is a log message")

Ale chcę kontrolować, jak wygląda rejestrowanie, więc w loggingsetup mam coś takiego:

#loggingsetup.py
import logging

logging.root.setLevel(logging.DEBUG)

consoleOut = logging.StreamHandler()
consoleOut.setLevel(logging.INFO)  
consoleOut.setFormatter(logging.Formatter("\t"+logging.BASIC_FORMAT))
logging.root.addHandler(consoleOut)

#etc

Teraz wydaje się, że działa dobrze. Przypuszczam, że jako wstępne pytanie powinienem zapytać, czy jest to właściwy sposób na to, czy też jest inny sposób strukturyzacji mojego kodu, który byłby preferowany.

Ale moje główne pytanie brzmi, że kiedy prowadzę Pilint na A.Pe, otrzymuję ostrzeżenie, takie jak "Niewykorzystany import - Importuj loggingsetup", ponieważ nie wywołuję żadnych metod ani funkcji z loggingsetup.

Mogę zrobić coś w rodzaju przedefiniować ciało loggingsetup jako funkcję i zadzwoń, ale wydaje się głupie i podatne na błędy (musiałbym martwić się o dzwonienie do nim dwukrotnie, jeśli importuję loggingsetup od gdzie indziej, a jeśli rozumiem jak Python obsługuje import, to nie jest problem z moim aktualną konfiguracją).

Mogłem oczywiście powiedzieć Pilunt, aby zignorować ostrzeżenie, ale myślałem, że poproszę o to najpierw, aby upewnić się, że to nie jest coś, co powinienem radzić sobie z inaczej.

27
Retsam 14 sierpień 2012, 20:51

6 odpowiedzi

Najlepsza odpowiedź

Takie podejście, którego użył, jest użycie loggingsetup jako rodzaju owijce dla logging.

import logging

# set up logging config here

from logging import *

Następnie w innych modułach:

import loggingsetup as logging

Możesz użyć nazwy innego niż {x0}} w tym przypadku, np. tweaked_logging lub logging_with_my_settings.

14
kindall 14 sierpień 2012, 17:21

W takich przypadkach nadal można wyraźnie powiedzieć Pilint, że ten nieużywany import w przeznaczeniu:

import loggingsetup # pylint: disable=unused-import

Zauważ, że instrukcja jest na tej samej linii, co import, więc W0611 jest wyłączony tylko dla tej linii, a nie dla całego bloku poniżej.

30
Thomas Grainger 18 czerwiec 2014, 14:55

Jeśli używasz pylint i flake8 Możesz ignorować nieużywane ostrzeżenie o imporcie w obu narzędziach w ten sposób:

import loggingsetup  # noqa # pylint: disable=unused-import
25
rutsky 20 kwiecień 2016, 10:46

Twój kod powinien być w funkcji nazywanej raz w głównym skrypcie

4
Xavier Combelle 14 sierpień 2012, 17:25

Jak wspomniałeś sobie zawijanie go w funkcji i dzwonienie do konfiguracji wyraźnie rozwiąże to ostrzeżenie. A jak wspomniał Steven, byłoby to uznane za lepszy kod, ponieważ jest bardziej wyraźny na temat tego, co robisz.

Jeśli dwukrotnie dzwonisz o nazwie tej funkcji, możesz oczywiście użyć staczej flagi modułu, aby umożliwić wykonywanie korpusu funkcji tylko raz.

__initialized = False

def init():
    if not __initialized:
        __initialized = True
        #DoStuff
4
Michael Mauderer 14 sierpień 2012, 17:25

Oto, jak można spełnić ostrzeżenie (Vscode + Pilint);

from array import array
ar = array('i', [])

Więc zamiast używać dzikiej karty, ponownie określoną metodę "tablicy".

0
TABISH 25 grudzień 2018, 21:03