运行时错误:在python中使用exit(0)时超出最大递归深度

时间:2014-09-15 23:47:58

标签: python python-2.7

我正在经历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循环的方式,但我删除了所有这些并且我遇到了同样的问题。

谢谢。

1 个答案:

答案 0 :(得分:4)

非常简单。您将函数命名为exit(),并且您的函数尝试调用名为exit()的函数。因此,你的函数调用自己,然后再次调用自己,再一次,再次......

当函数调用自身时,这称为递归调用。如果你的函数反复调用太多次,最终会达到限制并且Python会停止你的程序。 Python提出了一个异常,告诉你"最大递归深度"到了。

这是一个简单的解决方法:

import sys

def dead(why):
    print why, "Good job!"
    sys.exit(0)

现在你的程序明确要求一个特定的exit()函数,即sys内的函数。 sys.exit()一次,而不是永久地递归调用自己,程序将停止。

另一种解决方案是将您的功能重命名为exit()以外的其他功能。 Zed打电话给他dead()这就是为什么他的榜样有效。