Python崩溃而不是引发异常
我写了这个程序:Python崩溃而不是引发异常,python,runtime-error,Python,Runtime Error,我写了这个程序: def fun(): try: 1/0 except: fun() fun() 我原以为会得到一个异常,但实际上,我得到了以下致命错误: Fatal Python error: Cannot recover from stack overflow. Current thread 0x00003bec (most recent call first): File "<stdin>", line 2 in fun File "<stdin>", li
def fun():
try: 1/0
except: fun()
fun()
我原以为会得到一个异常,但实际上,我得到了以下致命错误:
Fatal Python error: Cannot recover from stack overflow.
Current thread 0x00003bec (most recent call first):
File "<stdin>", line 2 in fun
File "<stdin>", line 3 in fun
引发以下异常:
def fun():
fun()
fun()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in fun
File "<stdin>", line 2, in fun
File "<stdin>", line 2, in fun
[Previous line repeated 995 more times]
RecursionError: maximum recursion depth exceeded
但是当代码出错时,程序就会崩溃
有人能给我解释一下为什么会发生这种情况吗?是的,你在同名函数中调用你的函数,这会导致你陷入一个递归的兔子洞——一个无法逃脱的函数调用自己
def fun():
try: 1/0
except: fun()
这意味着当您调用fun(如果1/0引发错误)时,它将移动到except分支并调用fun函数,如果1/0引发错误,它将移动到except分支并调用fun函数,如果1/0引发错误,它将移动到except分支并调用fun函数,如果1/0引发错误,它将移动到except分支除了分支和调用函数fun
如果你明白了
因此,如果您正在学习错误处理,您可能希望返回一些值,如:
def fun():
try:
1/0
except:
return "Error handling worked"
fun()
对失败时,只需重复调用刚刚失败的同一个函数。这是一个恶性循环。异常处理程序应该捕获错误并执行不同的操作,而不是再次重复完全相同的过程。疯狂就是一次又一次地做同样的事情,却期待着不同的结果result@roganjosh非常感谢。但是请把答案写在一个答案里,而不是写在评论里,这样人们就可以投赞成票或反对票了。你已经有了一个比我在电话里能做的更全面的答案。它用不同的语言表达了和我相同的观点,你可以自由地接受。我不打算在这里写任何明确的东西。