用unicode记录dict

2024-04-23 23:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

使用python2.6(不要评判我;-))和日志模块,我发现尝试用unicode位记录整个dict会引起问题。你知道吗

你知道吗日志.调试(“mydict是%s”,mydict)

当在测试运行程序中运行时,这会导致UnicodeDecodeError异常,但在简单的python shell中则不会。你知道吗

>>> d
{'foo': u'\u2615'}
>>> d['bar'] = d['foo'].encode('utf8')
>>> d
{'foo': u'\u2615', 'bar': '\xe2\x98\x95'}
>>> print d['foo']
☕
>>> print d['bar']
☕
>>>
>>> d
{'foo': u'\u2615', 'bar': '\xe2\x98\x95'}
>>> print "%s" % d
{'foo': u'\u2615', 'bar': '\xe2\x98\x95'}
>>> import logging
>>> logging.basicConfig()
>>> log = logging.getLogger('')
>>> log.setLevel(logging.DEBUG)
>>> log.debug("%s", d)
DEBUG:root:{'foo': u'\u2615', 'bar': '\xe2\x98\x95'}

因此,在终端中一切正常,但在测试运行程序中我遇到了异常,因为python显然试图使用ascii编解码器对dict的repr字符串进行解码。你知道吗

所以,我想知道为什么不一致?为了调试目的,向记录器发送dict的一种好的、安全的方法是什么?你知道吗

干杯, 迈克


Tags: 模块debug程序logfoologgingunicodebar