Python 2 转 3 字节/字符串错误
我正在尝试把一个为Python 2写的库转换成Python 3,这里是代码。
在第152行我遇到了一个错误。在Python 2版本中,这个函数是:
def write(self, data):
self._write_buffer += data
错误信息是:
类型错误:无法隐式地将'字节'对象转换为字符串
我发现我需要对这个变量进行解码,所以我把函数改成了:
def write(self, data):
self._write_buffer += data.decode('utf8')
这样可以运行了,但我在asyncore库中又遇到了另一个错误,提示:
(类型)必须是字节或缓冲区,而不是字符串
那么,我该怎么办呢?
1 个回答
5
你需要搞清楚在哪些地方需要字节(bytes),在哪些地方需要字符串(strings)。如果你只是简单地在出现错误的地方加上 decode
和 encode
,那就像打地鼠一样,解决一个问题又冒出一个新问题。在你的情况下,你是在写一个套接字(socket)的实现。套接字处理的是字节,而不是字符串。所以我觉得你的 _write_buffer 应该是一个字节对象,而不是你现在用的字符串。
第91行应该改成:
self._write_buffer = b''
然后你可以从这里开始,确保在整个过程中都使用字节。