python3 with中异常的问题

问题:

python中 with语句可以帮助 打开和关闭一些东西,比如用open的时候,那如果在在with语句之前加上了try 在 with语句中如果出现异常了,走到exception 后,with还会对程序进行关闭吗?

答案:

with是上下文管理器协议 实例如下:

try:
    with open('xxx') as fin:
        pass
except Exception:
    pass

上下文管理器协议的本质就是【try-finally结构】:

try:
    try:
        fin = open('xxx')
        pass
    finally:
        fin.close()
except Exception:
    pass

再来要理解finally的本质:暂时压制try子句中抛出的异常,直到finally子句执行完毕后,再将其重新抛出。
上面代码中,如果内层try子句的pass部分出现了异常,会先被finally捕获并处理,然后才会进入外层的except子句。
那么这个内层try子句的pass部分是什么呢?就是with结构中的语句。所以with结构在任何情况下都能顺利完成清理工作。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值