You need to enable JavaScript to run this app. Python2.x升级至3.9时struct.unpack解码二进制文件触发str.join TypeError问题
优惠活动
大模型
产品
解决方案
定价
更多

Python2.x升级至3.9时struct.unpack解码二进制文件触发str.join TypeError问题

错误原因

Python 3 中以二进制模式(rb)打开文件时,read() 方法返回 bytes 类型对象,对 bytes 按索引取值会得到整型字节数值,而非单字符字符串,因此无法通过字符串的join()方法拼接,触发类型错误。

适配修改代码

原有逻辑是取读取到的4个字节中索引为2、3的两个字节,解析为大端序有符号短整型,直接对bytes对象切片即可实现需求,无需手动拼接:

readBytes = inputFile.read(4)
# 直接切片取索引2到4的字节,等价于原逻辑的字节拼接效果
target_bytes = readBytes[2:4]
arg = "h"
number = struct.unpack('>' + arg, target_bytes)[0]

如果需要单独取指定索引的字节拼接,可使用字节类型的拼接运算符+:

target_bytes = readBytes[2:3] + readBytes[3:4]

补充说明

  • 原代码在Python 2中可正常运行,是因为Python 2的二进制读取操作返回普通str类型,索引取值为单字符字符串,join方法可正常执行
  • struct.unpack原生支持传入bytes类型作为解析对象,无需额外转成字符串类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 17:54:10