求助, Python 解释器 byterun 的代码,运行报错

2019-08-07 18:19:13 +08:00
 jiushengyuan

代码在刚刚开始时就跑不起来了,源代码在这里,就两个文件 __main__.pypyvm2.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__']

1588 次点击
所在节点    Python
3 条回复
ampedee
2019-08-07 18:51:34 +08:00
3.3 还是 3.5 变过一次字节码的数量,切到 3.3 之前的版本试试吧
jiushengyuan
2019-08-07 18:57:19 +08:00
@ampedee 意思是 3 到 3.3 的版本吗?我直接用 2 了。
jiushengyuan
2019-08-08 10:21:40 +08:00
@ampedee 用 3.3 可以跑起来,谢谢(,,・ω・,,)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX