2014-01-08 99 views
0

我建立一个三维阵列self.QL={} 和“擦除”的阵列0的:KeyError异常的蟒蛇......

for loop0 in range(50): 
    for loop1 in range(50): 
     for loop2 in range(self.actions): 
      self.QL[loop0, loop1, loop2] = 0 

但是当我运行该程序,并尝试从阵列得到的值,它牛逼hrows的错误:

File "Bots/QL.py", line 135, in _chooseaction 
self.vQ = self.QL[state[0],state[1],a] 
KeyError: (0, 63, 0) 

管线135,我有:

def _chooseaction(self, state): 
    self.vQ = 0 
    self.action = 0 
    self.temp = -1000 

     for a in range(self.actions): 
     self.vQ = self.QL[state[0],state[1],a] 
      if self.vQ > self.temp: 
      self.temp=self.vQ 
      self.action=a 

      return self.action 

我做了什么WRO NG?

回答

2

state[1]的值为63,但你只能用值来初始化它从0到49

这就是为什么它说,关键(0,63,0)不存在。

也许你可以使用defaultdict?

from collections import defaultdict 

self.QL = defaultdict(int) 

现在self.QL基本上是一个字典,它对于任何它没有的值都是0。