Dla następującego kodu:pylint wiadomość: rejestrowanie-Format-interpolacja
logger.debug('message: {}'.format('test'))
pylint
produkuje następujące ostrzeżenie:
rejestrowanie format-interpolacji (W1202):
Użyj% formatowania w funkcjach rejestrowania i przekazuj parametry% jako argumenty Używane, gdy instrukcja rejestrowania ma formularz połączenia "logowanie. (Format_string.format (format_args ...))". Takie wywołania powinny zamiast tego używać formatowania%, ale pozostawić interpolację funkcji rejestrowania , przekazując parametry jako argumenty.
Wiem, że mogę wyłączyć to ostrzeżenie, ale lubię to rozumieć. Zakładałem, że używanie format()
jest preferowanym sposobem drukowania instrukcji w python3
. Dlaczego nie jest tak w przypadku instrukcji rejestratora?
Czym dokładnie jest funkcjonalność, z której nie można skorzystać? Czy '.format()' jest zawsze rozszerzone? Czy to właśnie oznacza "leniwą interpolację", że jest ona rozszerzana tylko po wywołaniu? – pfnuesel
@pfnuesel, .format() jest rozwijany przed wywołaniem logger.error, podczas gdy "leniwy interpolacja" oznacza, że rozwijanie jest wykonywane tylko w razie potrzeby (np. Wiadomość jest faktycznie wyświetlana gdzieś) – sthenault
Czy istnieje dobre odniesienie dla tej leniwej oceny preferowane i robiące różnicę? Nie mogłem go znaleźć w [PEP282] (https://www.python.org/dev/peps/pep-0282/) lub [bibliotece logowania] (https://docs.python.org/2/library /logging.html) – culix