问题:
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结构在任何情况下都能顺利完成清理工作。
本文深入探讨了Python中with语句的工作原理,特别是在try-except结构中的行为。通过实例解释了with语句如何确保资源在异常情况下也能正确关闭,即使在内层try块中发生异常,with结构也会在finally子句中完成清理工作。
31万+

被折叠的 条评论
为什么被折叠?



