列表索引超出范围 - python数组错误

时间:2012-02-14 22:10:36

标签: python arrays

文件“C:\ Users \ Tom \ Desktop \ Tetris!\ tetris.py”,第206行,在typeSet中     Globals.blockArray [I] .x.append(7) IndexError:列表索引超出范围

我在typeSet

中获得第4行的上述错误

初始化时:

def main():
    initialize()

def initialize():
    Globals.running = True
    addBlock()

class Globals:
    running = True
    blockArray = []
    blockNum = 0

然后是:

def addBlock():
    Globals.blockArray.append(block())

class block:
    def __init__(self):
        self.id = Globals.blockNum
        Globals.blockNum += 1
        self.x = []
        self.y = []
        self.landed = False
        self.blockType = 1#random.randint(1,6)
        self.typeSet()


    def typeSet(self):
        i = self.id
        if self.blockType == 1:
            #square(i)
            Globals.blockArray[i].x.append(7)
            Globals.blockArray[i].y.append(0)
            Globals.blockArray[i].x.append(7)
            Globals.blockArray[i].y.append(1)
            Globals.blockArray[i].x.append(8)
            Globals.blockArray[i].y.append(0)
            Globals.blockArray[i].x.append(8)
            Globals.blockArray[i].y.append(1)

编辑:添加了更多代码并进行了切换,因此id应从0开始。错误代码未更改

4 个答案:

答案 0 :(得分:1)

代码不够。该错误告诉您确切的问题。 Globals.blockArrayi位置没有成员。这就是为什么你不应该使用全局变量来避免它们的原因,因为要确保你的全局变量在它们中具有预期值是很困难的。

答案 1 :(得分:0)

虽然没有立即考虑上面的代码,但我要尝试的第一件事就是打印Globals.blockArrayGlobals.blockArray[i]的内容。

答案 2 :(得分:0)

我不确定,但也许你想做

Globals.blockArray.append(self)
在init函数中

,并且在赋值给self.id后增加Globals.blockNum

答案 3 :(得分:0)

每次创建block的实例时,Globals.blockNum都会增加1,而self.id会设置为Globals.blockNum当前值

稍后(typeSetself.id用于索引Globals.blockArray

Globals.blockArray中没有至少self.id + 1个项目时,会发生错误。

如果Globals.blockNum不断增加且其值(间接)用于索引Globals.blockArray,则可能会导致错误(除非某些因素导致Globals.blockArray继续增长。