Python字典的KeyError

2024-04-27 22:45:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在练习一个><> (Fish)解释器,却被一个错误卡住了。问题代码似乎在这里:

import sys
from random import randint

file = sys.argv[1]
code = open(file)
program = code.read()

print(str(program))

stdin = sys.argv[2]
prgmlist = program.splitlines()
length = len(prgmlist)
prgm = {}
for x in range(0,length-1):
    prgm[x+1] = list(prgmlist[x])

这里的目标是将代码放入某种网格中,这样每个命令都可以单独执行和计算。我所说的网格,是指映射到列表:

^{pr2}$

等等。在

但是,当我尝试使用cmd = prgm[y][x]检索命令时,它会给我KeyError: 0。在

感谢任何帮助。在

以下是回溯:

Traceback (most recent call last):
  File "/Users/abest/Documents/Python/><>_Interpreter.py", line 270, in <module>
    cmd = prgm[cmdy][cmdx]
KeyError: 0

以及整个代码的pastebin。在

输入来自wiki页面的hello world程序:

!v"hello, world"r!
 >l?!;o

Tags: 代码inimport命令cmd网格syscode
2条回答

你会想用像

cmd = prgm[x][y]

第一部分prgm[x]将访问字典中x键的值列表,然后[y]将从列表中提取yth元素。在

很少有问题-

  1. 您没有考虑最后一行,因为您的range是-for x in range(0,length-1):-并且range的stop参数是独占的,所以它不会转到length-1。实际上不需要获取使用范围的长度,只需使用for i, x in enumerate(prgmlist):enumerate()在每次迭代中返回索引和当前元素。在

    for i, x in enumerate(prgmlist, 1):
        prgm[i] = list(x)
    
  2. 第二,从实际代码来看,您最初似乎是将cmdx定义为0,但是在for循环中(如上所述),您只是从1开始字典中的索引。所以应该从1开始定义它。示例-

    ^{pr2}$

    你应该从^{开始cmdy。好像你把它们都颠倒了。

相关问题 更多 >