python2的unicode编码和str()打印问题

在调试python2代码的过程中,发现直接向异常中写入Unicode字符串会出现报错,如下:

class DevExistError(Exception):
    u"""设备已存在."""
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return u"{} 设备ID已存在!".format(self.message)

raise exc.DevExistError("1")
'''
Traceback (most recent call last):
  File "E:/desktop/hashring/hashring/app/ringbuilder.py", line 295, in 
    raise exc.DevExistError("1")
hashring.common.exceptions.DevExistError: 
'''

这是因为Unicode对象会执行str函数转换为str类型再打印,而str类型是二进制字节流,不涉及编码,如果没有指定则默认使用ascii编码,而ascii编码没有对应的汉字,所以会报str()错误。
修改方式是在打印信息后,指定encoding编码方式,限制以utf-8的方式生成str

class DevExistError(Exception):
    u"""设备已存在."""
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return u"{} 设备ID已存在!".format(self.message).encode("utf-8")

raise exc.DevExistError("1")
'''
Traceback (most recent call last):
  File "E:/desktop/hashring/hashring/app/ringbuilder.py", line 295, in 
    raise exc.DevExistError("1")
hashring.common.exceptions.DevExistError: 1 设备ID已存在!
'''

你可能感兴趣的:(python2的unicode编码和str()打印问题)