【问题标题】:Error in executing python code- dictionary problem执行python代码时出错-字典问题
【发布时间】:2010-07-18 08:55:50
【问题描述】:
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)

但是当我返回时,它给了我一个错误,最终是我用键和值列表创建的目录

错误是:

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

【问题讨论】:

  • 我觉得while not stack.isEmpty():看起来更好一点
  • 或者while stack:,假设它是一个列表。
  • ys...bt 它不会使 n] 输出有任何差异
  • 你可以在 之前 while stack.isEmpty() != 1: 发布更多代码吗?你在哪里打电话给directionToVector
  • 我没有在我的代码中的任何地方调用 diretionToVector...有一个文件已经定义了这个函数。有很多在其他文件中运行的函数就像...非法方向,总成本......等等......

标签: python dictionary


【解决方案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

【讨论】:

    【解决方案2】:

    这个错误

    KeyError: 'W'
    

    表示您请求的键 ('W') 不是存储在字典中的键之一。这是因为您的字典键是“west”而不是“W”(请参阅​​您的 previous question)。试试这个:

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

    或者,确保将字符串“west”传递给directionToVector,而不是字符串“W”。

    【讨论】:

    • 但我必须将密钥保留为 (1,1), (4,5).. 这种格式,以便我可以通过引用此密钥返回我的路径并获取相关的方向到这把钥匙。我不能改变函数“def directionvector”...我不允许这样做....
    • 我认为您将键与值混淆了。键为“west”、“north”等,值为 (1, 1)、(4, 5) 等。
    • @Shilpa:为什么不允许您更改定义?你老师这么说的?此外,您无需更改定义,只需更改其调用方式即可。
    • 我的老师告诉我只更改 1 个文件....不要碰其他文件...因为他们要求我只提交我的代码..他们将在他们的系统中运行它其他文件保持不变...
    • 我的字典输出顺序如下:{(5, 4): 'North', (1, 3): 'West', (5, 5): 'North', (4, 5):'East'............等等......所以这里的关键是(5,4),价值是North......对吗??
    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2014-05-30
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多