我正在经历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循环的方式,但我删除了所有这些并且我遇到了同样的问题。
谢谢。
答案 0 :(得分:4)
非常简单。您将函数命名为exit()
,并且您的函数尝试调用名为exit()
的函数。因此,你的函数调用自己,然后再次调用自己,再一次,再次......
当函数调用自身时,这称为递归调用。如果你的函数反复调用太多次,最终会达到限制并且Python会停止你的程序。 Python提出了一个异常,告诉你"最大递归深度"到了。
这是一个简单的解决方法:
import sys
def dead(why):
print why, "Good job!"
sys.exit(0)
现在你的程序明确要求一个特定的exit()
函数,即sys
内的函数。
另一种解决方案是将您的功能重命名为exit()
以外的其他功能。 Zed打电话给他dead()
这就是为什么他的榜样有效。