所以,当我玩弄python的时候,我注意到程序的堆栈大小基本上没有限制(一直对一个数字执行幂运算,甚至在达到数千位之后,精度仍然保持完美)。这让我不禁要问:如果我意外地进入了python中的无限递归循环呢?编译器会注意到并抛出堆栈溢出错误吗或者程序会崩溃?我的CPU会燃烧吗?老实说,这不是我急于测试自己的东西。

最佳答案

我保证,没有现代电脑会因为用户代码而燃烧。你自己试试吧:

def recurseInfinitely( n ):
    recurseInfinitely(n+1)

recurseInfinitely(0)

立即运行此程序会产生以下输出:
  [...]
    recurseInfinitely(n+1)
  File "so.py", line 2, in recurseInfinitely
    recurseInfinitely(n+1)
  File "so.py", line 2, in recurseInfinitely
    recurseInfinitely(n+1)
RuntimeError: maximum recursion depth exceeded

您可以捕获错误并检查n的值:
def recurseInfinitely( n ):
    try:
        recurseInfinitely(n+1)
    except RuntimeError:
        print "We got to level %s before hitting the recursion limit."%n

得到:
在达到递归极限之前,我们到达了997级。

07-26 06:07