Python 2 - 包含unicode的日志对象

时间:2016-05-10 20:06:46

标签: python-2.7 unicode utf-8

出于调试目的,我正在尝试记录包含unicode字符串的内容字典:

logging.info(str(data))

data具有以下结构:

{'whatever®': 1}

显然,在调用str()时,UnicodeEncodeError会爆炸,因为它会尝试使用引擎盖下的ASCII编解码器将®符号转换为字节字符串。

由于dict个实例没有__unicode__个方法,除了为这种方法编写自己的toString函数之外,最好的方法是实现我正在尝试做的事情。永远不会将unicode字符串转换为字节串的数据?在stdlib或我可以使用的任何外部库中是否有我不知道的实用程序函数?

1 个答案:

答案 0 :(得分:0)

提供Python对象的模糊文本表示的

repr()函数对于测试和调试很有用,它似乎适合于日志记录:logging.info(data)应该按原样运行。

str(dict_object)应该调用repr(dict_object)以递归方式调用repr()的dict键和值,这不会引发UnicodeEncodeError错误(结果只包含Python上可打印的ascii字符) 2)。

可能的解释是UnicodeEncodeError在显示Unicode内容期间发生(问题中没有 - 示例中有一个字节串,除非您使用Python 3或from __future__ import unicode_literals)因为语言环境是未配置(检查LANGLC_CTYPELC_ALL envvars)或脚本的输出被重定向到管道文件(在这种情况下设置PYTHONIOENCODING envvar)。