Mensaje de PyLint: logging-format-interpolation

Para el siguiente código:

logger.debug('message: {}'.format('test')) 

pylint produce la siguiente advertencia:

registro-formato-interpolación (W1202):

Use el formato% en las funciones de registro y pase los parámetros% como argumentos. Se utiliza cuando una statement de registro tiene una forma de llamada de “registro. (Format_string.format (format_args …))”. Dichas llamadas deben usar% formating en su lugar, pero dejar la interpolación a la función de registro al pasar 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 sentencias en Python 3. ¿Por qué esto no es cierto para las sentencias del registrador?

No es cierto para la statement del registrador porque se basa en el antiguo formato “%” como cadena para proporcionar una interpolación perezosa de esta cadena usando argumentos adicionales dados a la llamada del registrador. Por ejemplo, en lugar de hacer:

 logger.error('oops caused by %s' % exc) 

deberías hacer

 logger.error('oops caused by %s', exc) 

por lo tanto, la cadena solo se interpolará si el mensaje se emite realmente.

No puede beneficiarse de esta funcionalidad cuando usa .format() .


Por la sección de optimización de los documentos de logging :

El formato de los argumentos del mensaje se aplaza hasta que no se pueda evitar. Sin embargo, calcular los argumentos pasados ​​al método de registro también puede ser costoso, y es posible que desee evitar hacerlo si el registrador simplemente desecha su evento.