对于这个递归代码,为什么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())
在Python2.7中,返回:
Error
False
但是,在Python3.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所建议的那样,您可以修改标题吗?我们不想点击这里的诱饵!由于“不清楚你在问什么”,所以不太清楚为什么有两个人投票决定关闭。问题很清楚。