我常常找到自我记录对象,如:
result = call_a_func(XXX)
logger.info(u"I caught an exception {}".format(result))
问题是如果result是一个带有unicode字符的字符串的对象(仍然是一个bytestring)并且没有__unicode__
方法,那么这将会爆炸。
示例:
try:
# Exception with a unicode encoded in a string with utf-8
raise Exception("\xea\xb5\xad") # Note this is not usually created under my control
except Exception as e:
return u"I captured: {}".format(e)
记录来自外部库的对象的最佳方法是什么,您不确定它是否可以将其转换为unicode? p>
还有什么比通过以下函数传递它更好:
def as_unicode(in_obj):
try:
return unicode(in_obj)
except UnicodeDecodeError:
return str(in_obj).decode("utf-8")