Python报TypeError: str无法与bytes拼接 附代码求修复方案
报错根因
Python3 对文本类型(str)和二进制字节类型(bytes)做了严格的类型隔离,不允许直接拼接两种不同类型的数据。
代码中socket对象的recv(1024)方法从网络获取的返回值是bytes类型,但reliable_receive方法内初始化的json_data是空字符串""属于str类型,执行拼接操作时就会触发can only concatenate str (not "bytes") to str的TypeError,服务端、客户端的报错都是同一原因导致。
修复方法
将网络收到的字节流先按统一编码解码为字符串,再做拼接和JSON解析即可,修正后的reliable_receive方法代码如下:
def reliable_receive(self): json_data = "" while True: try: # 接收字节流后用utf-8解码为字符串,与json_data类型保持一致 json_data = json_data + self.connection.recv(1024).decode("utf-8") return json.loads(json_data) except ValueError: continue
配套注意事项
- 收发两端编解码规则必须统一:发送数据时,需要把JSON序列化后的字符串编码为bytes再调用socket的send方法,示例发送逻辑:
# 发送数据示例 send_data = json.dumps(["exit"]) self.connection.send(send_data.encode("utf-8")) - 如果业务场景需要传输非utf-8编码的内容,把编解码传入的
"utf-8"替换为对应字符集即可,两端必须使用相同编码,否则会出现乱码或JSON解析失败。
内容的提问来源于stack exchange,提问作者Pythonboy
相关产品推荐
相关产品推荐

