Quiero usar la salida de pprint para mostrar una estructura de datos compleja, pero me gustaría generarla usando el módulo de registro en lugar de stdout.
ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
Quiero usar la salida de pprint para mostrar una estructura de datos compleja, pero me gustaría generarla usando el módulo de registro en lugar de stdout.
ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
pprint.pformat()
estaba en esa página.
Respuestas:
Úselo pprint.pformat
para obtener una cadena y luego envíela a su marco de registro.
from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))
AttributeError: 'function' object has no attribute 'pformat'
alguna idea de por qué?
from pprint import pprint,pformat
entonceslogging.debug((pformat(stuff))
La solución anterior no fue suficiente para mí porque también estoy usando un formateador para agregar nombre y nombre de nivel al iniciar sesión. Se ve un poco desordenado:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
Puede haber una solución más elegante, pero esta:
for line in pprint.pformat(ds).split('\n'):
logging.debug(line)
produce algo un poco más agradable:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
__main__ : DEBUG : 'bbbbbbbbbbbbbbbbbbbb',
__main__ : DEBUG : 'cccccccccccccccccccc',
__main__ : DEBUG : 'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
\n
carácter adicional en el pformat. Al menos así el bloque queda unido.
pprint( {}, stream )
, pero lo encontré bastante incómodo. hubiera pensado que algo comospprint
podría haber sido mejor quepformat
(como enc
).