在调试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 <module>
raise exc.DevExistError("1")
hashring.common.exceptions.DevExistError: <exception str() failed>
'''
这是因为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 <module>
raise exc.DevExistError("1")
hashring.common.exceptions.DevExistError: 1 设备ID已存在!
'''