对于这个递归代码,为什么Python2.7没有给出堆栈溢出错误,而Python3.5给出了堆栈溢出错误?

对于这个递归代码,为什么Python2.7没有给出堆栈溢出错误,而Python3.5给出了堆栈溢出错误?,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,今天早些时候,我在Python,Java&JS中读到了这个奇怪的例子: try: return True finally: return False 返回False 所以,我决定玩弄它: def casetree(): 尝试: 案例三() 除: 打印(“错误”) 案例三() 最后: 返回错误 打印(casetree()) 在Python2.7中,返回: Error False 但是,在Python3.5中: Error Fatal Python error: Cannot

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

try:
    return True
finally:
    return False
返回
False

所以,我决定玩弄它:

def casetree():
尝试:
案例三()
除:
打印(“错误”)
案例三()
最后:
返回错误
打印(casetree())
在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
错误
致命的Python错误:无法从堆栈溢出中恢复。
当前线程0x000025ec(最新调用优先):
案例三中的第3行文件“``”
重复最后一行,直到最终得到:

有人能解释为什么
2.7
的代码不会导致堆栈溢出,而
3.5
会导致堆栈溢出吗?

您遇到的错误似乎是预期的,因为它是在
Lib/test/test\u sys.py
函数中明确测试的

现在,在不批评您丰富多彩的实验的情况下,这也是导致segfault的错误的原因(有时,请参阅问题);已经有一份报告提交给as


如果您想知道是什么导致了这种情况,请密切关注该线程。

“唯一的区别是我们将递归从finally移动到try”-为什么您认为这不会改变输出?现在还不清楚是什么让你感到惊讶,或者为什么。你能专注于一个具体的问题吗
RecursionError
RuntimeError
在Python 3.5之前)只是一个异常,可能被
try/except/finally
构造捕获和处理。2. <代码>最后必须执行
块。这两条语句就是解释代码中发生的事情所需的全部内容。编辑问题以集中于一个问题,正如@jornsharpecon所建议的那样,您可以修改标题吗?我们不想点击这里的诱饵!由于“不清楚你在问什么”,所以不太清楚为什么有两个人投票决定关闭。问题很清楚。