2015-10-11 13 views
14

Pylint beschwert sich über Invalid constant name "myprint" (invalid-name) im Fall einer Kurzschrift für eine Protokollfunktion.Pylint-Nachricht: Ungültiger Konstantenname (ungültiger Name)

# import 
from utils import get_logger 
LOGFILE = '6_evaluator.log' 
myprint = get_logger(LOGFILE) 

def main(): 
    # some stuff 
    myprint('log log') 

if __name__ == '__main__': 
    main() 

Kann dies erfolgen, ohne die pylint-Konfiguration zu optimieren?

Falls erforderlich, hier ist die Definition von get_logger:

import logging 
import os 

def get_logger(logfile): 
    """ Return a logger that log on stdout and in LOGFILE""" 
    if os.path.isfile('{}'.format(logfile)): 
     os.remove('{}'.format(logfile)) 

    logging.basicConfig(filename='{}'.format(logfile), level=logging.INFO) 
    logger = logging.getLogger('') 
    logger.addHandler(logging.StreamHandler()) 
    myprint = logger.info 

    myprint('log file at: {}'.format(logfile)) 
    myprint('Again Hello from logger') 
    return myprint 
+0

Können Sie eine Beispielprotokolldatei freigeben? Ich möchte einen Test machen. – mertyildiran

+0

Ähnliche Fragen und Antworten: https://stackoverflow.com/questions/10815549/pylint-showing-invalid-variable-name-in-output –

Antwort

13

Das Verschieben der Definition von myprint zu main() ist eine Möglichkeit, die Nachricht zu unterdrücken.

Pro Pylint docs for invalid-name (C0103) scheint es, dass der Name einer Konstanten groß geschrieben werden muss. Daher wird der Name MYPRINT die Nachricht nicht generieren.

Wenn Sie den Kommentar wie folgt an die Zeile anhängen, sollte die Nachricht nicht generiert werden.

log = get_logger() # pylint: disable=locally-disabled, invalid-name 

Alternativ fügen Sie Folgendes zu .pylintrc für Ihr Projekt hinzu. Dies ist meine bevorzugte Lösung.

[BASIC] 
good-names=log 

Wenn Sie ein ganzes Muster von ungültigen Namen (und nicht nur einen einzelnen Namen) wollten gültig sein, können Sie sonst const-rgx usw. im selben Abschnitt anpassen. Siehe die vorher verlinkte Seite.

Schließlich, wenn Ihre Anwendung klein und unabhängig ist, können Sie nur die Root-Logger konfigurieren und stattdessen verwenden, wie mit logging.warn('test').

2

Das Problem ist, dass Sie myprint auf Modulebene definieren.

Wenn Sie es innerhalb main definieren, erhalten Sie diesen Fehler nicht von pylint.

Verwandte Themen