ฉันต้องการใช้เอาต์พุตของ 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))
การแก้ปัญหาดังกล่าวข้างต้นไม่ได้ค่อนข้างตัดมันสำหรับฉันเพราะฉันยังมีการใช้การจัดรูปแบบเพื่อเพิ่มชื่อและ levelname เมื่อเข้าสู่ระบบ ดูเหมือนไม่เป็นระเบียบเล็กน้อย:
__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
)