繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM