代码在刚刚开始时就跑不起来了,源代码在这里,就两个文件 __main__.py 和 pyvm2.py 。
以下是我写到文件里,作为要编译的源代码
def f():
print(1)
先用 python3.7.2 跑,在报错信息是:
File "e:\PythonCode\500lines\interpreter\pyvm2.py", line 181, in parse_byte_and_args
arg = f.code_obj.co_consts[arg_val]
IndexError: tuple index out of range
调试能看到 arg_val 是 25600,f.code_obj.co_consts 是长度为 3 的列表,所以 index out of range。但是不懂为什么。
网上很少讨论,搜达一处说可能是 python3 的字节码有变。
不确定这是否是问题原因,我用 python2.7.16 跑,还没 python3 执行的多呢。
报错信息是:
File "e:\PythonCode\500lines\interpreter\pyvm2.py", line 175, in parse_byte_and_args
byte_name = dis.opname[byteCode]
TypeError: list indices must be integers, not str
调试看到,byteCode 是 'd'
不知道如何解决了,大佬们帮忙看看鸭
FYI:在遇到上述问题前,另外有一些报错
对于 python3, with open(filename, 'rU') as f:
报错,可换成 with open(filename, 'r', newline='') as f
对于 python2,main_mod.__builtins__ = sys.modules['builtins']
报错,可换成 main_mod.__builtins__ = sys.modules['__builtin__']
1
ampedee 2019-08-07 18:51:34 +08:00 via Android
3.3 还是 3.5 变过一次字节码的数量,切到 3.3 之前的版本试试吧
|
2
jiushengyuan OP @ampedee 意思是 3 到 3.3 的版本吗?我直接用 2 了。
|
3
jiushengyuan OP @ampedee 用 3.3 可以跑起来,谢谢(,,・ω・,,)
|