• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

聊聊python中的异常嵌套

python 搞代码 4年前 (2022-01-07) 28次浏览 已收录 0个评论

这篇文章主要介绍了python中的异常嵌套的相关资料,帮助大家更好的理解和学习python 异常的相关知识,感兴趣的朋友可以了解下

在Python中,异常也可以嵌套,当内层代码出现异常时,指定异常类型与实际类型不符时,则向外传,如果与外面的指定类型符合,则异常被处理,直至最外层,运用默认处理方法进行处理,即停止程序,并抛出异常信息。如下代码:

 try: try: raise IndexError except TypeError: print('get handled') except SyntaxError: print('ok')

运行程序:

Traceback (most recent call last):
File “”, line 3, in
raise IndexError
IndexError


再看另一个被外层try-except捕获的例子:

 try: try: 1/0 finally: print('finally') except: print('ok')

运行:

finally
ok

这里值得注意的是except:可以捕获所有的异常,但实际上这样做也有缺点,即有时候会包住预定的异常。


另外,需要提到的是raise A from B,将一个异常与另一个异常关联起来,如果from后面的B没有被外层捕获,那么A,B异常都将抛出,例如:

 try: 1/0 except Exception as E: raise TypeError('bad') from E

运行:

Traceback (most recent call last):
File “”, line 2, in
1/0
ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “”, line 4, in
raise TypeError(‘bad’) from E
TypeError: bad

相反,如果外层捕获了B:

 try: try: 1/0 except Exception as E: raise TypeError from E except TypeError: print('no'

运行:

n来源gao($daima.com搞@代@#码(网o


最后,再看看try-finally在嵌套中的表现。

 try: try: 1/0 finally: print('finally') except: print('ok')

运行:

finally
ok

不管有没有异常发生,或者其是否被处理,finally的代码都要执行,如果异常被处理,则停止,如果没有被处理,向外走,直至最终没处理,采用默认方法处理,上例中,异常在最外层被处理。

 try: try: 1/0 except Exception as E: print('happens') finally: print('finally') except E: print('get handled')

运行:

happens
finally

异常在内部被处理,不再向外传播。

以上就是聊聊python中的异常嵌套的详细内容,更多关于python 异常嵌套的资料请关注gaodaima搞代码网其它相关文章!

以上就是聊聊python中的异常嵌套的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:聊聊python中的异常嵌套

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址