2015-11-07 7 views
1

Я пытаюсь перебирать массив (в виде постоянная) кортежей:объекта «» NoneType не итерация

SPRITE_RIGHT = [(0, 0), (16, 0), (32, 0)] 
SPRITE_LEFT = [(0, 16), (16, 16), (32, 0)] 
SPRITE_UP = [(0, 32), (16, 32), (32, 0)] 
SPRITE_DOWN = [(0, 48), (16, 48), (32, 0)] 
def symbol(self): 
    self._status += 1 

    if (self._status > 2): 
     self._status = 0 

    if (self._dx > 0): 
     (x, y) = PacMan.SPRITE_RIGHT[self._status] 
     return (x,y) 
    if (self._dx < 0): 
     (x, y) = PacMan.SPRITE_LEFT[self._status] 
     return (x,y) 
    if (self._dy > 0): 
     (x, y) = PacMan.SPRITE_DOWN[self._status] 
     return (x,y) 
    if (self._dy < 0): 
     (x, y) = PacMan.SPRITE_UP[self._status] 
     return (x,y) 
... 
for a in arena.actors(): 
     if not isinstance(a, Wall): 
      x, y, w, h = a.rect() 
      xs, ys = a.symbol()    #This line gives me the problem 
      screen.blit(sprites, (x, y), area=(xs, ys, w, h)) 

Когда я выполнить программу я получаю эту ошибку:

TypeError: 'NoneType' object is not iterable 

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

When i print PacMan.SPRITE_UP[0] for example it returns the correct tuple

+1

Код, который вы опубликовали, является правильным, если принять разумное значение для 'self._status'. Возможно, вы слишком много опустили. Можете ли вы попытаться создать минимальный рабочий пример, который все еще показывает ошибку при выполнении? – Joost

+0

x, y = Нет @Joost – palsch

+0

Таким образом, SPRITE_RIGHT [self._status] - None – palsch

ответ

0

Проверьте значение, возвращенное a.symbol() , Похоже, он пытается размотать его на два значения и потерпеть неудачу.

Когда вы сделаете это:

xs, ys = a.symbol()  #This line gives me the problem 

он называет a.symbol(), которая возвращает значение. Код предполагает, что это значение является итерабельным, содержащим два значения. xs и ys являются изменены на ссылки на эти два значения.

Если значение, возвращаемое a.symbol(), является чем-то иным, кроме такого, как итерация , назначение не удастся. Сообщение об ошибке, которое вы получили, TypeError: 'NoneType' object is not iterable, предполагает, что a.symbol() возвращает None.

+0

Когда я печатаю PacMan.SPRITE_UP [0], например, он возвращает правильный кортеж – Alex

+0

Спасибо, я решил проблему , Я не рассматривал конкретное значение dx – Alex

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