Я хочу использовать вывод pprint, чтобы показать сложную структуру данных, но я хотел бы выводить его с помощью модуля регистрации, а не stdout.
ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
Я хочу использовать вывод pprint, чтобы показать сложную структуру данных, но я хотел бы выводить его с помощью модуля регистрации, а не stdout.
ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
pprint.pformat()
был на той странице.
Ответы:
Используйте, pprint.pformat
чтобы получить строку, а затем отправить ее в свою платформу ведения журнала.
from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))
AttributeError: 'function' object has no attribute 'pformat'
почему?
from pprint import pprint,pformat
тогда нужноlogging.debug((pformat(stuff))
Приведенное выше решение не совсем мне помогло, потому что я также использую форматировщик для добавления имени и имени уровня при регистрации. Выглядит немного неопрятно:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
Может быть более элегантное решение, но это:
for line in pprint.pformat(ds).split('\n'):
logging.debug(line)
производит что-то более приятное:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
__main__ : DEBUG : 'bbbbbbbbbbbbbbbbbbbb',
__main__ : DEBUG : 'cccccccccccccccccccc',
__main__ : DEBUG : 'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
\n
символ в pformat. По крайней мере, так блок вместе.
pprint( {}, stream )
, но нашел это довольно неудобным. я бы подумал, что что-то вродеspprint
могло быть лучше, чемpformat
(как вc
).