在python游戏中堆栈溢出

时间:2014-12-11 19:39:47

标签: 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 = 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()

根据要求打印到终端的确切内容:

致命的Python错误:无法从堆栈溢出中恢复。

当前主题0x00001d54(最近一次调用):   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,更新中的第963行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第148行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot中的第140行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,调用中的第1487行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,更新中的第963行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第148行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot中的第140行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,调用中的第1487行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,更新中的第963行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第148行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot中的第140行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,调用中的第1487行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,更新中的第963行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第148行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot中的第140行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,调用中的第1487行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,更新中的第963行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第148行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot中的第140行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,调用中的第1487行   文件&#34; D:\ Python34 \ lib \ tkinter__init __。py&#34;,更新中的第963行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第148行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   文件&#34; C:\ Users \ Caleb \ workspace \ CS 108 \ src \ project \ Controller.py&#34;,p1_shoot_move中的第150行   ...

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

好的,这看起来像是有人参加了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

将其作为循环重做

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)