为什么我在格式字符串的python warnings.formatwarning中遇到编码错误?

时间:2009-10-06 08:21:08

标签: python encoding warnings

我在这一行得到编码错误:

s =  "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message)

UnicodeEncodeError:'ascii'编解码器无法编码位置44中的字符u'\ xc4':序数不在范围内(128)

我尝试通过将所有参数组合传递给字符串格式来重现此错误,但最接近的是“ascii decode”错误(通过同时传递unicode和高ascii字符串,强制将字符串转换为unicode,使用ascii解码器

但是,我没有设法得到“ascii encode”错误。有人有想法吗?

2 个答案:

答案 0 :(得分:8)

当Python试图强制参数时会发生这种情况:

s = u"\u00fc"
print str(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 0: ordinal not in range(128)

这是因为你的一个参数是一个对象(不是任何类型的字符串),而Python上调用str()。有两种解决方案:对格式(s = u"%s...")使用unicode字符串,或用repr()包装每个参数。

答案 1 :(得分:1)

您传递的其中一个操作数不适合ASCII编码 - 可能包含Unicode或Latin-1字符。将格式字符串更改为Unicode,看看会发生什么。