with:python2.5之后引用,一种与异常处理相关的语句。

with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

用法:

with EXPR as VAR:BLOCK

实际运行过程:

  1. 执行EXPR,生成上下文管理器context_manager;
  2. 获取上下文管理器的__exit()__方法,并保存起来用于之后的调用;
  3. 调用上下文管理器的__enter__()方法;如果使用了as子句,则将__enter__()方法的返回值赋值给as子句中的VAR;
  4. 执行BLOCK中的表达式;
  5. 不管是否执行过程中是否发生了异常,执行上下文管理器的__exit__()方法,__exit__()方法负责执行“清理”工作,如释放资源等。如果执行过程中没有出现异常,或者语句体中执行了语句break/continue/return,则以None作为参数调用__exit__(None, None, None);如果执行过程中出现异常,则使用sys.exc_info得到的异常信息为参数调用__exit__(exc_type, exc_value, exc_traceback)
  6. 出现异常时,如果__exit__(type, value, traceback)返回False,则会重新抛出异常,让with之外的语句逻辑来处理异常,这也是通用做法;如果返回True,则忽略异常,不再对异常进行处理。

enter和exit方法可以自定义。

python中的with相关推荐

  1. 如何优雅的在python中暂停死循环?

    死循环 有时候在工作中可能会遇到要一直执行某个功能的程序,这时候死循环就派上用途了,python中死循环的具体形式大致如下 while True:run_your_code() 结束死循环 通常我们结 ...

  2. 关于python中的dict和defaultdict

    dict 在Python中如果访问字典中不存在的键,会引发KeyError异常,所以一般当我们比如统计一句话的词频时候,我们总是使用这样的处理方式: strings = ('puppy', 'kitt ...

  3. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  4. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  5. Python中正则表达式用法 重点格式以这个为准_首看_各种问题

    20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...

  6. 逗号分隔的字符串转换为Python中的列表 split

    将逗号分隔的字符串转换为Python中的列表 给定一个字符串: 它是由逗号分隔的几个值的序列: mStr = '192.168.1.1,192.168.1.2,192.168.1.3' 如何将字符串转 ...

  7. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  8. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

  9. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  10. 通过带Flask的REST API在Python中部署PyTorch

    通过带Flask的REST API在Python中部署PyTorch 在本文中,将使用Flask来部署PyTorch模型,并用讲解用于模型推断的 REST API.特别是,将部署一个预训练的Dense ...

最新文章

  1. 为了节省能量,人类演化出了“不合规律”的大脑神经元 | Nature
  2. 一定要用虚拟化服务器吗?
  3. 蓝桥杯基础练习之杨辉三角
  4. python c语言接口_C/C++ 提供 Python 接口
  5. dicom文件的后缀_dcm文件扩展名,dcm文件怎么打开?
  6. linux桌面系统开启wifi,8089B开启Wifi的方法(默认的红旗linux系统)
  7. C/C++中控制循环结构语句:break;continue;
  8. 看到一些有点深度的分析,转做留存
  9. 北京市密云区谷歌卫星地图下载
  10. 典型相关分析CCA计算过程
  11. 互联网广告算法和系统实践-读书笔记
  12. Gazebo手册:【1】gazebo基本操作案例
  13. VSCode 工具常用插件
  14. 【数据结构与算法】冒泡排序算法(BubbleSort)
  15. 关于最近激烈竞争的打车软件的一些看法
  16. 【20岁的时候决定自己的一生】
  17. 吾生也有涯,吾知也无涯_乌拉(12)
  18. Tv开发 Google 官方demo leanback遇到的问题
  19. 如何将IE10降到IE9
  20. Myeclipse 6.0 注册码生成器代码

热门文章

  1. boosting_bagging
  2. vue post请求后台django接口Forbidden (CSRF token missing or incorrect.)
  3. Serverless的4种错误打开方式
  4. 代码优化 5 大原则,第一条就是别优化了!!!
  5. 怎么对 Java 程序调优?不看别后悔!
  6. 反模式:神仙大类和黄金大锤
  7. Go语言入门——dep入门
  8. API网关Kong系列(二)部署
  9. springboot整合flowable
  10. 区分TTL、MSL、RTT