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
相关产品推荐
相关产品推荐

