You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码报错排查:TypeError: bytes类型无法JSON序列化,错误源于JSON编码还是Socket发送阶段?

问题分析与解答

这个错误完全是在JSON编码数据的阶段产生的,和Socket向客户端发送数据的步骤没有关系,我们可以从报错回溯和代码逻辑两方面来确认:

1. 从报错回溯定位错误阶段

看你提供的报错栈:

Traceback (most recent call last):
  ...
  File "backdoor.py", line 18, in reliable_send
    self.json_data = json.dumps(data)
  ...
TypeError: Object of type bytes is not JSON serializable

错误直接触发在json.dumps(data)这一行——也就是你尝试把command_result转成JSON字符串的时候,此时还没有执行到self.connection.send的发送逻辑,所以和Socket发送环节无关。

2. 代码逻辑层面的原因

你的execute_command函数返回的是subprocess.check_output()的结果,这个函数默认返回bytes类型的命令输出。而JSON序列化器(json.dumps)只能处理Python原生的可序列化类型(比如字符串、整数、列表等),bytes类型不在这个范围内,因此触发了序列化失败的错误。

修复方案

只需要把execute_command返回的bytes数据转换成字符串即可,建议指定编码(比如UTF-8):

def execute_command(self, command):
    que = subprocess.check_output(command, shell=True)
    # 将bytes转成UTF-8编码的字符串
    return que.decode("utf-8")

如果命令输出可能存在编码不兼容的情况,可以添加错误处理,避免解码失败:

return que.decode("utf-8", errors="replace")

这样修改后,command_result就变成了字符串类型,json.dumps可以正常序列化,后续的Socket发送步骤也能顺利执行。

内容的提问来源于stack exchange,提问作者Nafiyad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:02:30