关于python with在异常中的问题

dewei
  • 129

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

回复
阅读 3.7k
1 个回答
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结构在任何情况下都能顺利完成清理工作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏