对于这个递归代码,为什么Python 2.7没有给出堆栈溢出错误但3.5呢?

今天早些时候,我在
Python,Java& S中读到了这个奇怪的案例. JS:

try:
    return True
finally:
    return False

返回False.

所以,我决定玩弄它:

def caseThree():
    try:
        caseThree()
    except:
        print("Error")
        caseThree()
    finally:
        return False
print(caseThree())

在Python 2.7中,它返回:

Error
False

但是,在Python 3.5中:

Error
Fatal Python error: Cannot recover from stack overflow.

Current thread 0x000025ec (most recent call first):
  File "`<stdin>`", line 3 in caseThree

最后一行重复,直到你最终得到:…

任何人都可以解释为什么2.7的代码不会导致堆栈溢出,而3.5呢?

最佳答案 看起来您遇到的错误实际上是预期的,因为它在Lib / test / test_sys.py函数
test_recursionlimit_fatalerror中进行了明确的测试.

现在,在没有批评你的丰富多彩的实验的情况下,这也是导致段错误的错误的原因(有时,请参阅问题);已经有一份关于the Python bug tracker的报告是issue 28179.

如果您对导致此问题的原因感到好奇,请密切关注该主题.

点赞