python游戏中的堆栈溢出

python游戏中的堆栈溢出,python,tkinter,Python,Tkinter,我用Tkinter做的游戏有点麻烦。拍摄了大约50次后,程序崩溃,错误为:致命Python错误:无法从堆栈溢出中恢复 我不确定是什么原因造成的,但我知道这部分代码中有 self.p1_shot_out = False def p1_shoot(event): if self.p1_shot_out == True: self.canvas.delete(self.laser_p1) self.laser_p1 = se

我用Tkinter做的游戏有点麻烦。拍摄了大约50次后,程序崩溃,错误为:致命Python错误:无法从堆栈溢出中恢复

我不确定是什么原因造成的,但我知道这部分代码中有

    self.p1_shot_out = False

    def p1_shoot(event):

        if self.p1_shot_out == True:
            self.canvas.delete(self.laser_p1)

        self.laser_p1 = self.canvas.create_image(50, self.y_p1 +50, image=self.p1_laser)
        self.x_p1_laser = 50
        self.p1_shot_out = True

        time.sleep(.009)
        p1_shoot_move()

    def p1_shoot_move():

        if self.x_p1_laser <= 900:

            self.canvas.move(self.laser_p1,5,0)
            self.x_p1_laser += 5 
            self.canvas.update()
            time.sleep(.009)
            p1_shoot_move()
self.p1\u shot\u out=False
def p1_喷射(事件):
如果self.p1\u shot\u out==真:
self.canvas.delete(self.laser_p1)
self.laser\u p1=self.canvas.create\u image(50,self.y\u p1+50,image=self.p1\u laser)
self.x_p1_激光器=50
self.p1\u shot\u out=真
时间。睡眠(.009)
p1_射击_移动()
def p1_shoot_move():

如果self.x_p1_laser正常,这看起来像是有人在上Coursera Interactive python课程,因此他们的代码没有在正常的解释器中运行(因此没有递归限制异常)

问题在于:

   if self.x_p1_laser <= 900:
       self.canvas.move(self.laser_p1,5,0)
       self.x_p1_laser += 5 
       self.canvas.update()
       time.sleep(.009)
       p1_shoot_move() # Potential infinite self-recusion

如果self.x\u p1\u激光器,您在哪里呼叫p1\u shot?我相信你看到了这一点,因为你一直在互相调用函数,如果你能把它们拉到一个循环中,它就能解决这个问题,你能包括回溯吗?我很确定原因是您递归调用
p1\u shot\u move
,python将堆栈计数限制为1000。@RafaelBarros我想您会得到一个
运行时错误:在这个过程中超过了最大递归深度case@user2097159当空格键打开时,我会调用p1_shotpressed@Rafael巴罗斯,我到底怎样才能得到追踪?我不是100%确定那是什么。谢谢!我觉得自己很愚蠢,因为我现在看到了它,却没有想到使用while循环。
while self.x_p1_laser <= 900:
   self.canvas.move(self.laser_p1,5,0)
   self.x_p1_laser += 5 
   self.canvas.update()
   time.sleep(.009)