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

将Python代码转字节码再转二进制并打印列表时遇属性错误

解决Python函数转字节码并输出二进制列表的问题

错误原因

  • dis.Bytecode(func)返回的是指令解析迭代器,每个元素是Instruction对象,并非原始字节码数据,因此没有size属性,也无法用len()获取长度。
  • 要获取函数编译后的原始字节码,需直接访问函数的__code__.co_code属性,这是一个bytes对象,存储了函数的原始字节码。

修正后的代码

def func():
    a = 10
    b = 20
    c = a + b
    print(c)

# 获取函数的原始字节码(bytes类型)
raw_bytecode = func.__code__.co_code

# 将每个字节转为8位二进制字符串,存入列表
binary_list = [bin(b)[2:].zfill(8) for b in raw_bytecode]

# 打印二进制列表
print(binary_list)

# 可选:将二进制列表还原为原始字节码
# restored_bytecode = bytes(int(b, 2) for b in binary_list)
# print(restored_bytecode)

代码说明

  1. 获取原始字节码:func.__code__.co_code直接返回函数编译后的原始字节码,类型为bytes,每个元素是0-255的单字节整数。
  2. 转二进制列表:通过列表推导式遍历每个字节,bin(b)[2:]去掉二进制前缀0b,zfill(8)补全为8位标准二进制字符串,保证每个字节的二进制格式统一。
  3. 原代码额外问题修正:原代码存在变量名错误(list_code初始化后,循环中误用未定义的string_code),同时struct.pack属于冗余操作——co_code本身已是bytes类型,无需二次打包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:30:20