python try except 嵌套_聊聊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'

运行:

no

最后,再看看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 异常嵌套的资料请关注我们其它相关文章!

本文标题: 聊聊python中的异常嵌套

本文地址: http://www.cppcns.com/jiaoben/python/340529.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值