2014-01-08 3 views
0

Я построить 3D массив 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 

Но когда я запускаю программу и попытаться получить значение из массива, он брос ошибка:

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 нг?

ответ

2

state[1] имеет значение 63, но только инициализируется его со значениями от 0 до 49.

, поэтому он говорит, что ключ (0, 63, 0) не существует.

Возможно, вы можете использовать defaultdict?

from collections import defaultdict 

self.QL = defaultdict(int) 

Теперь self.QL в основном является dict, равным 0 для любых значений, которых он не имеет.

Смежные вопросы