如何在Python中引发堆栈溢出错误?

8

我目前使用的代码是:

def f():
    try:
        f()
    except RecursionError:
        f()

try:
    f()
except RecursionError:
    f()

这会立即导致栈溢出,然而我在想是否有一种更Pythonic的简单方法来做到这一点。


这对我来说看起来很Pythonic。 - Mad Physicist
1
你可以移除外层的try块,只保留函数内部的一个。 - Mad Physicist
只是出于好奇,是什么促使您提出这个问题的? - Mad Physicist
3
我认为在第一时间崩溃Python解释器并不是一件非常符合Python风格的事情。 - abarnert
@MadPhysicist 谢谢,我发现外部块实际上并不需要。有一天,当我在查看网站上描述的RecursionError时,我尝试捕获该错误,结果出现了致命的Python错误:无法从堆栈溢出中恢复。 - shamilpython
显示剩余2条评论
1个回答

3
import sys
sys.setrecursionlimit(10**8)

def ackermann(m,n):
     if m == 0:
          return (n + 1)
     elif n == 0:
          return ackermann(m - 1, 1)
     else:
          return ackermann(m - 1, ackermann(m, n - 1)) 
          
for x in range(5):
    for y in range(5):
        print(ackermann(x, y)) 

Python的默认递归限制是10 ** 4。您可以使用setrecursionlimit()更改它,因此,当Ackermann函数的输出过长时,您可能会遇到“堆栈溢出”错误。


5
似乎过于复杂。 - montw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接