使用unicode记录dict导致UnicodeDecodeError

时间:2018-04-18 00:07:56

标签: python debugging unicode

使用Python 2.6(不要判断我;-))使用日志记录模块,我发现尝试使用unicode位记录整个dict会导致问题。

log.debug(“mydict is%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发送到记录器的好方法是什么?

干杯, 麦克

0 个答案:

没有答案