将Python Exception转换为字符串失败,并出现编码错误

时间:2018-02-16 18:47:34

标签: python-2.7

我是Python的新手,我遇到了打印异常内容的一些问题:

# -*- coding: ISO-8859-1 -*-

    except Exception as err:
    print(err)

产生“UnicodeEncodeError:'ascii'编解码器无法编码位置52中的字符u'\ uf260':序数不在范围内(128)”

我试过阅读https://docs.python.org/2.7/howto/unicode.html#the-unicode-type,但我遇到的问题是为了解码和编码或使用unicode(..,errors ='ignore')我需要一个字符串和str(错误)失败并显示以上错误消息。

这是在Windows环境中。感谢任何回复,即使它是“学会搜索!”因为在那种情况下确实有一个类似的问题,我在搜索期间错过了希望得到回答:)

编辑。我试过了

print("Error {0}".format(str(err.args[0])).encode('utf-8', errors='ignore'))

产生完全相同的错误消息。

1 个答案:

答案 0 :(得分:0)

  

UnicodeEncodeError:' ascii'编解码器不能对字符u' \ uf260'进行编码。在   第52位:序数不在范围内(128)

查看错误,字符\uf260不是ascii,但有些东西试图将非ascii字符视为ascii。什么?

请改为:print err.__repr__()

<强>解释

err是一个Exception对象,它实现了__str__()函数,因此在打印时会调用一个对象object.__str__(),这实际上会带来这个错误。您可以通过致电print err.__str__()来验证是否有类似错误。

另外,要检查Exception类模块是否为__str__(),您可以执行dir(Exception)

更新: Check this link to understand how print picks up encoding.

<强>参考文献:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

Python __str__ versus __unicode__

How to print a class or objects of class using print()?

Python: Converting from ISO-8859-1/latin1 to UTF-8

Why does Python print unicode characters when the default encoding is ASCII?