Для следующего кода:
logger.debug('message: {}'.format('test'))
pylint
выдает следующее предупреждение:
logging-format-interpolation (W1202):
Используйте форматирование% в функциях ведения журнала и передайте параметры% в качестве аргументов. Используется, когда оператор ведения журнала имеет форму вызова «logging. (Format_string.format (format_args ...))». Такие вызовы должны использовать форматирование%, но оставить интерполяцию для функции регистрации, передав параметры в качестве аргументов.
Я знаю, что могу отключить это предупреждение, но я хотел бы понять это. Я предположил, что использование format()
является предпочтительным способом распечатки операторов в Python 3. Почему это не так для операторов логгера?
источник
.format()
стилю в какой-то момент, потому чтоlogging
он обновился? Я спрашиваю, потому что меня больше интересует ремонтопригодность, чем передовая скорость, по крайней мере, для большинства задач.Может быть, это разница во времени может помочь вам.
Следующее описание не является ответом на ваш вопрос, но может помочь людям.
Для pylint 2.4: Есть 3 варианта входа стиль в
.pylintrc
файле:old
,new
,fstr
fstr
опция добавлена в 2.4 и удалена в 2.5Описание из
.pylintrc
файла (v2.4):для старых (
logging-format-style=old
):для нового (
logging-format-style=new
):Примечание : вы не можете использовать,
.format()
даже если вы выберитеnew
опцию.Pylint по-прежнему выдает то же предупреждение для этого кода:
для fstr (
logging-format-style=fstr
):Лично я предпочитаю вариант fstr из-за PEP-0498 .
источник
"python.linting.pylintArgs": ["--logging-format-style=old"]
в файл vscode / settings.json. документыoptparse.OptionValueError: option logging-format-style: invalid value: 'fstr', should be in ['old', 'new']
обновление до последней Пилинта (2.4.4) исправило это.Try installing a more recent version of python-pylint, and please open a bug report if the issue persists in t\ he latest release. Thanks!
По моему опыту, более веская причина, чем оптимизация (для большинства случаев использования) для ленивой интерполяции, заключается в том, что она прекрасно работает с агрегаторами журналов, такими как Sentry.
Рассмотрим сообщение «пользователь вошел в систему». Если вы интерполируете пользователя в строку формата, у вас будет столько разных сообщений журнала, сколько есть пользователей. Если вы используете ленивую интерполяцию, подобную этой, агрегатор журналов может более разумно интерпретировать это как одно и то же сообщение журнала с кучей разных экземпляров.
источник