2010-07-18 40 views
2
while stack.isEmpty() != 1: 
      fin = stack.pop() 
     print fin   - output is (1,1) 
     k = final.get(fin) 
     return k 

def directionToVector(direction, speed = 1.0): 
    dx, dy = Actions._directions[direction] 
    return (dx * speed, dy * speed) 
    directionToVector = staticmethod(directionToVector) 

,但是当我这样做的回报,它给了我一个错误,最后是我的钥匙的名单由和值错误执行Python代码 - 字典问题

的错误是目录:

File "line 212, in directionToVector 
    dx, dy = Actions._directions[direction] 
KeyError: 'W' 
+0

我想'而不是stack.isEmpty():'看起来好一点 – SiggyF 2010-07-18 09:01:12

+0

或'而堆栈:'假设它是一个列表。 – 2010-07-18 09:04:15

+0

ys ... bt它不会使n]在输出中有任何不同 – Shilpa 2010-07-18 09:05:23

回答

0

此错误

KeyError: 'W' 

意味着你请求的关键字(“W”)不是关键之一存储在日e字典。这是因为你的字典键是'西'而不是'W'(见你的previous question)。试试这个:

key = { 'N' : 'north', 'S' : 'south', 'E' : 'east', 'W' : 'west' }[direction] 
dx, dy = Actions._directions[key] 

此外,请确保您传递字符串“西”以directionToVector,而不是字符串“W”。

+0

但是我必须保留这个格式的密钥(1,1),(4,5)..这样我可以通过引用这个键回到我的路径并获得与这个键有关的方向。我不能改变finction“def directionvector”......我不允许这样做...... – Shilpa 2010-07-18 09:02:43

+1

我觉得你把键和值混淆了。键是“西”,“北”等,值是(1,1),(4,5)等。 – ars 2010-07-18 09:05:53

+0

@ Shilpa:为什么你不允许改变定义?你的老师说这个?除此之外,您无需更改定义,只需调用它即可。 – 2010-07-18 09:06:00

1

Actions._directions大概是一本字典,所以该行:

dx, dy = Actions._directions[direction] 

在运行时(基于错误信息)是:

dx, dy = Actions._directions["W"] 

和它的抱怨,有在没有键“W”那本字典。所以你应该检查一下,你是否已经在那里添加了一些有价值的密钥。或者,你可以这样做:

dx, dy = Actions._directions.get(direction, (0, 0)) 

其中(0,0)可以是任何缺省值选择时,有没有这样的关键。另一种可能性是明确地处理错误:

try: 
    dx, dy = Actions._directions[direction] 
except KeyError: 
    # handle the error for missing key