Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pygame-RuntimeError:调用Python对象时超过最大递归深度_Python_Pygame - Fatal编程技术网

Pygame-RuntimeError:调用Python对象时超过最大递归深度

Pygame-RuntimeError:调用Python对象时超过最大递归深度,python,pygame,Python,Pygame,当我尝试运行代码时,我经常会遇到以下错误: RuntimeError: maximum recursion depth exceeded while calling a Python object 我很困惑为什么会发生这种情况,我试图使一个图片闪烁,并不断向下移动的屏幕,作为一个对象,玩家必须回避,如果点击被“杀死”(仍然添加碰撞)。当我开始收到错误消息时,会向shell发送以下消息: File "C:\Users\John\Desktop\Michael\V'Room External\GA

当我尝试运行代码时,我经常会遇到以下错误:

RuntimeError: maximum recursion depth exceeded while calling a Python object
我很困惑为什么会发生这种情况,我试图使一个图片闪烁,并不断向下移动的屏幕,作为一个对象,玩家必须回避,如果点击被“杀死”(仍然添加碰撞)。当我开始收到错误消息时,会向shell发送以下消息:

File "C:\Users\John\Desktop\Michael\V'Room External\GAME_MAIN_.py", line 195, in movement
    fallingObject()
File "C:\Users\John\Desktop\Michael\V'Room External\GAME_MAIN_.py", line 206, in fallingObject
    movement()
File "C:\Users\John\Desktop\Michael\V'Room External\GAME_MAIN_.py", line 160, in movement
    print(x)
File "C:\Python34\lib\idlelib\PyShell.py", line 1352, in write
    return self.shell.write(s, self.tags)
RuntimeError: maximum recursion depth exceeded while calling a Python object
有关守则如下:

def movement():
    crashed = False
    while not crashed:
        print(x)
        ...
        if x < -10:
              x = -10
        else:
            if x > 490:
                x = 490
            else:
                fallingObject()



def fallingObject():
    global w
    w = 20
    global o_x
    o_x = random.randrange(0,width)
    objectSpawn = True
    while objectSpawn:
        movement()
    ...
def movement():
崩溃=错误
虽然没有崩溃:
打印(x)
...
如果x<-10:
x=-10
其他:
如果x>490:
x=490
其他:
fallingObject()
def fallingObject():
全球w
w=20
全球o_x
o_x=random.randrange(0,宽度)
objectSpawn=True
对象生成时:
运动()
...

问题是,在某些条件下,您的
移动()
方法调用
fallingObject()
然后调用
移动()
,然后调用
fallingObject()
然后调用
移动()
,然后调用
fallingObject()
。。。如果没有最大的递归深度,它们将继续无限地相互调用。Python检测到此模式并关闭您的程序。无限递归总是不好的

如果您查看这些方法的过于简化版本,您可以看到它们相互调用:

def fallingObject():
  ...
  movement()
  ...


由于代码中的条件,这种行为并不总是发生,只有当-10问题是在某些条件下,
movement()
方法调用
fallingObject()
然后调用
movement()
并调用
fallingObject()
,然后调用
movement()
然后调用
fallingObject()
。。。如果没有最大的递归深度,它们将继续无限地相互调用。Python检测到此模式并关闭您的程序。无限递归总是不好的

如果您查看这些方法的过于简化版本,您可以看到它们相互调用:

def fallingObject():
  ...
  movement()
  ...


由于代码中的条件,只有当-10
坠落对象
移动
相互调用时,只要
对象生成
未崩溃
均为
,这种行为才会发生。由于
movement
在修改
objectSpawn
之前被调用,而
crash
仅在用户退出时才被更改,因此他们会互相调用,直到达到递归限制(默认为1000),而我在代码中看不到任何延迟或滴答率,这种情况会很快发生


请注意,这些调用中的每一个都发生在
while
循环中。重新构造代码以使用这些循环运行游戏(您甚至可能不需要两者),而不是像这样进行递归调用。

fallingObject
movement
只要
object\u Spawn
未崩溃
都是
True
就互相调用。由于
movement
在修改
objectSpawn
之前被调用,而
crash
仅在用户退出时才被更改,因此他们会互相调用,直到达到递归限制(默认为1000),而我在代码中看不到任何延迟或滴答率,这种情况会很快发生


请注意,这些调用中的每一个都发生在
while
循环中。重新构造代码以使用这些循环运行游戏(您甚至可能不需要两者),而不是像这样进行递归调用。

您的
移动
函数调用
fallingObject
,该函数调用
移动
,创建递归循环。Python限制了递归的深度(默认情况下为1000次),因此需要重新组织逻辑以避免递归

顺便说一句,您还应该尽量避免使用可修改的全局变量,因为它们使代码模块化程度降低,这会使调试和扩展程序变得更加困难。但是,如果必须使用它们,则应将
global
语句放在每个需要它们的函数的开头。不要将它们分散在功能体中


我还看到
fallingObject
有一个
while
循环,该循环始终只运行一次。为什么?

您的
移动
函数调用
fallingObject
,它调用
移动
,创建一个递归循环。Python限制了递归的深度(默认情况下为1000次),因此需要重新组织逻辑以避免递归

顺便说一句,您还应该尽量避免使用可修改的全局变量,因为它们使代码模块化程度降低,这会使调试和扩展程序变得更加困难。但是,如果必须使用它们,则应将
global
语句放在每个需要它们的函数的开头。不要将它们分散在功能体中


我还看到
fallingObject
有一个
while
循环,该循环始终只运行一次。为什么?

如何创建最小、完整、可验证的示例:如何创建最小、完整、可验证的示例:
def fallingObject():
    ...   
    while objectSpawn:
        movement() #<-delete this line
        ...
        objectSpawn = False