Para el siguiente código:
logger.debug('message: {}'.format('test'))
pylint
produce la siguiente advertencia:
interpolación de formato de registro (W1202):
Use el formato% en las funciones de registro y pase los parámetros% como argumentos Se utiliza cuando una declaración de registro tiene una forma de llamada de "registro. (Format_string.format (format_args ...))". Dichas llamadas deberían usar el formato%, pero dejar la interpolación a la función de registro pasando los parámetros como argumentos.
Sé que puedo desactivar esta advertencia, pero me gustaría entenderla. Supuse que usar format()
es la forma preferida de imprimir declaraciones en Python 3. ¿Por qué esto no es cierto para las declaraciones de registrador?
fuente
.format()
estilo en algún momento porque selogging
ha actualizado? Pregunto porque estoy más interesado en la mantenibilidad que en el rendimiento de velocidad de punta, al menos para la mayoría de las tareas.Quizás esta vez las diferencias puedan ayudarte.
La siguiente descripción no es la respuesta a su pregunta, pero puede ayudar a las personas.
Para pylint 2.4: Existen 3 opciones para iniciar sesión en el estilo de
.pylintrc
archivo:old
,new
,fstr
fstr
opción agregada en 2.4 y eliminada en 2.5Descripción del
.pylintrc
archivo (v2.4):para viejo (
logging-format-style=old
):para new (
logging-format-style=new
):Nota : puede no utilizar
.format()
incluso si seleccionanew
la opción.Pylint todavía da la misma advertencia para este código:
para fstr (
logging-format-style=fstr
):Personalmente, prefiero la opción fstr debido a PEP-0498 .
fuente
"python.linting.pylintArgs": ["--logging-format-style=old"]
al archivo vscode / settings.json. docsoptparse.OptionValueError: option logging-format-style: invalid value: 'fstr', should be in ['old', 'new']
actualización a la última pylint (2.4.4) solucionó esto.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!
En mi experiencia, una razón más convincente que la optimización (para la mayoría de los casos de uso) para la interpolación perezosa es que juega muy bien con los agregadores de registros como Sentry.
Considere un mensaje de registro 'usuario conectado'. Si interpola al usuario en la cadena de formato, tiene tantos mensajes de registro distintos como usuarios. Si usa una interpolación perezosa como esta, el agregador de registros puede interpretarlo más razonablemente como el mismo mensaje de registro con un montón de instancias diferentes.
fuente