[英]Runtime Error: Maximum Recursion Depth Exceeded when Using exit(0) in python
我正在看Zed Shaw撰写的“艰苦学习Python”。
我目前正在第36课上: http : //learnpythonthehardway.org/book/ex36.html
我的问题:
我正在尝试根据Zed在第35课中所做的事情来创建自己的游戏: http : //learnpythonthehardway.org/book/ex35.html
在他的游戏中,他创建了以下函数来终止游戏:
def dead(why):
print why, "Good job!"
exit(0)
这在if / else语句中使用,例如:
choice = raw_input("> ")
if choice == "left":
bear_room()
elif choice == "right":
cthulhu_room()
else:
dead("You stumble around the room until you starve.")
当我运行他的程序时,它会在调用dead函数时退出。
但是,当我尝试在自己的代码中使用相同的构造时,出现以下错误:
RunTime Error: Maximum Recursion Depth Exceeded
在代码行吐出我的程序中调用exit(0)函数的位置之后。
这是我如何在程序中使用它的示例:
def exit(message):
print message, "Your adventure is over."
exit(0)
使用if / else这样的语句:
answer = raw_input("> ")
if "stay" in answer:
exit("Adventure and excitement are only available to those who participate.")
elif "don't" in answer:
exit("Great things were never achieved by cowards. Please rethink your choice.")
elif "wait" in answer:
exit("Great things were never achieved by cowards. Please rethink your choice.")
elif "outside" in answer:
exit("Adventure and excitement are only available to those who participate.")
elif "enter" in answer:
lobby()
elif "go" in answer:
lobby()
elif "through" in answer:
lobby()
elif "inside" in answer:
lobby()
else:
exit("Well, you're no fun!")
对我来说尚不清楚为什么它可以在Zed的程序中工作,但不是我自己的。 (是的,我知道这可能是elif的令人讨厌的用法,但是我的编程印章禁止我立即做其他事情)。
起初,我认为这是由于我在程序中使用while循环的方式所致,但是我删除了所有这些循环,并且遇到了同样的问题。
谢谢。
很简单 您将函数命名为exit()
,然后函数尝试调用名为exit()
的函数。 因此,您的函数会自行调用,然后一次又一次地调用自身...
当函数调用自身时,这称为递归调用。 如果您的函数多次调用自身,最终将达到极限,Python将停止程序。 Python引发异常,告诉您达到了“最大递归深度”。
这是一个简单的解决方法:
import sys
def dead(why):
print why, "Good job!"
sys.exit(0)
现在您的程序明确要求一个特定的exit()
函数,即sys
内部的那个。 它sys.exit()
一次永久地递归调用它,而是一次调用sys.exit()
,您的程序将停止。
另一个解决方案是将函数重命名为exit()
。 Zed称他为dead()
,这就是他的示例起作用的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.