gpt4 book ai didi

python - Pygame - 运行时错误 : maximum recursion depth exceeded while calling a Python object

转载 作者:太空宇宙 更新时间:2023-11-04 10:17:26 25 4
gpt4 key购买 nike

每当我尝试运行我的代码时,我总是会收到此错误:

RuntimeError: maximum recursion depth exceeded while calling a Python object

我对为什么会发生这种情况感到很困惑,我正在尝试使图片 blit 并不断向下移动屏幕,作为玩家必须躲避的对象,如果点击被“杀死”(仍然添加碰撞) .当我开始收到错误消息时,会向 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()
...

最佳答案

问题在于,在某些情况下,您的 movement() 方法会调用 fallingObject() 然后调用 movement() 并调用 fallingObject() 然后调用 movement() 然后调用 fallingObject()... 如果没有,它们将继续无限地相互调用最大递归深度。 Python 检测到这种模式并关闭您的程序。无限递归总是不好的!

如果您查看这些过于简化的方法,您会发现它们相互调用:

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

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

由于代码中的条件,这种行为并不总是发生,仅当 -10 <= x <= 490 时才会发生。

解决方案

您需要重新考虑您的逻辑。您从一个方法调用另一个方法的原因是什么?

实际上,我通过从 fallingObject() 中删除 movement() 调用并进行一些其他更改,设法让您的程序正常工作。这是防止无限递归的修改:

def fallingObject():
...
while objectSpawn:
movement() #<-delete this line
...
objectSpawn = False


从无限递归的角度来看,您已经删除了代码中不相关的那些部分,但我仍然在这里写下您必须做出的最重要的更改才能使您的程序运行:

  1. 在程序开头定义这些变量:o_x = 0o_y = 0,而不是在函数内部使用全局变量
  2. fallingObject() 中写入 if o_y >= height 而不是 if o_y > height
  3. 在绘制汽车道路时执行screen.blit(a, (o_x,o_y)),否则蓝屏隐藏掉落的物体

关于python - Pygame - 运行时错误 : maximum recursion depth exceeded while calling a Python object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34476939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com