Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python崩溃而不是引发异常_Python_Runtime Error - Fatal编程技术网

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非常感谢。但是请把答案写在一个答案里,而不是写在评论里,这样人们就可以投赞成票或反对票了。你已经有了一个比我在电话里能做的更全面的答案。它用不同的语言表达了和我相同的观点,你可以自由地接受。我不打算在这里写任何明确的东西。