代码在刚刚开始时就跑不起来了,源代码在这里,就两个文件 __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__']
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.