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

如何将Python代码编译为字节码并运行?实操报错求助

Python字节码生成与exec运行报错解决

问题场景

假设存在myfile.py文件,代码如下:

a = 6
b = 4
print(a+b)

想要将这段代码转换为字节码,尝试了以下代码:

source_code = '''a = 6
b = 4
print(a+b)'''
compiled_code = compile(source_code, '<string>', 'exec')
print(compiled_code.co_code)

运行后输出的字节码为:

b'\x97\x00d\x00Z\x00d\x01Z\x01\x02\x00e\x02e\x00e\x01z\x00\x00\x00\xa6\x01\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00d\x02S\x00'

但使用exec()运行字节码时出现报错:

Traceback (most recent call last):
  File "c:\Users\Dimuth De Zoysa\Desktop\Python_projects\OBftestcode.py", line 2, in <module>
    exec(compiled_code.co_code)
ValueError: source code string cannot contain null bytes

需要解决该报错问题。

解决方法

错误原因

compiled_code.co_code是Python字节码的原始字节序列,它不是可直接传给exec()的有效输入。exec()接受的是**compile()返回的编译后代码对象**,而非字节码字节串。直接传入字节串时,exec()会将其当作源代码字符串处理,而字节串中包含的空字节\x00不符合Python源代码格式,因此触发报错。

正确运行方式

直接将compile()生成的代码对象传入exec()即可正常运行:

source_code = '''a = 6
b = 4
print(a+b)'''
compiled_code = compile(source_code, '<string>', 'exec')
# 直接运行编译后的代码对象
exec(compiled_code)

字节码保存与加载(可选)

如果需要将字节码保存到文件,之后再加载运行,可以使用Python内置的marshal模块:

import marshal

source_code = '''a = 6
b = 4
print(a+b)'''
compiled_code = compile(source_code, '<string>', 'exec')

# 将字节码写入文件
with open('bytecode.bin', 'wb') as f:
    marshal.dump(compiled_code, f)

# 从文件加载并运行字节码
with open('bytecode.bin', 'rb') as f:
    loaded_code = marshal.load(f)
exec(loaded_code)

内容的提问来源于stack exchange,提问作者Dimuth De Zoysa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:43:14