Python 2 转 3 字节/字符串错误

8 投票
1 回答
7027 浏览
提问于 2025-04-16 06:36

我正在尝试把一个为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)。如果你只是简单地在出现错误的地方加上 decodeencode,那就像打地鼠一样,解决一个问题又冒出一个新问题。在你的情况下,你是在写一个套接字(socket)的实现。套接字处理的是字节,而不是字符串。所以我觉得你的 _write_buffer 应该是一个字节对象,而不是你现在用的字符串。

第91行应该改成:

self._write_buffer = b''

然后你可以从这里开始,确保在整个过程中都使用字节。

撰写回答