Python崩溃而不是引发异常

时间:2018-11-21 19:17:06

标签: 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>", line 3 in fun

File "<stdin>", line 3 in fun行显示了98次),然后程序崩溃了(而不是引发异常)。

我真的不明白为什么会这样。 当我运行上面的程序而没有错误时,它只会引发一个异常:

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

但是,如果代码错误,程序就会崩溃。

有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以在同名函数中调用函数,从而引导您顺利进行递归的兔子漏洞(一个自称函数)

def fun():
 try: 1/0
 except: fun()

这意味着,当fun()引发错误时调用1/0时,它将移至except分支并调用函数fun,如果1/0引发错误,则会调用fun将移至except分支并调用fun函数,如果1/0引发错误,它将移至except分支并调用函数fun,如果1/0引发错误。错误,它将移至except分支并调用函数fun ...

如果你有照片。

因此,如果您正在处理错误,则可能只是想返回一些值,如:

 def fun():
     try: 
         1/0
     except: 
         return "Error handling worked"

fun()