一、上下文管理器

含有__enter__和__exit__方法的对象就是上下文管理器

class Foo(object):def __init__(self):print('实例化一个对象')def __enter__(self):print('进入')def __exit__(self, exc_type, exc_val, exc_tb):print('退出')# return Trueobj = Foo()with obj:print('正在执行')

执行结果:

实例化一个对象
进入
正在执行
退出

因为我们在定义Foo时,定义了__enter__和__exit__方法,那么我们实例化的对象obj就是一个上下文管理器,

二、with 上下文管理器:

with 上下文管理器:语句体

当with遇到上下文管理器,就会在执行语句体之前,先执行上下文管理器的__enter__方法,然后再执行语句体,执行完语句体后(无论语句体是否报错),最后执行上下文管理器的__exit__方法

语句体出现异常时,如果 exit 返回 False(默认不写返回值时,即为False),则会重新抛出异常,让with 之外的语句逻辑来处理异常,这也是通用做法;如果返回 True,则忽略异常,不再对异常进行处理

三、with 上下文管理器 as target:

with 上下文管理器  as  target:代码语句体

with后面必须跟一个上下文管理器,如果使用了as,则是把上下文管理器的 enter() 方法的返回值赋值给 target,target 可以是单个变量,或者由“()”括起来的元组(不能是仅仅由“,”分隔的变量列表,必须加“()”)

**结论:**使用了 with 语句,不管在处理文件过程中是否发生异常,都能保证 with 语句执行完毕后已经关闭了打开的文件句柄

python中with的用法,上下文管理器相关推荐

  1. python上下文管理关键字_详解 Python 中的 with 与 上下文管理器

    with 这个关键字,对于每一学习Python的人,都不会陌生. 操作文本对象的时候,几乎所有的人都会让我们要用 with open ,这就是一个上下文管理的例子.你一定已经相当熟悉了,我就不再废话了 ...

  2. python sqlite3事务_python使用上下文管理器实现sqlite3事务机制

    如题,本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制. 1.python上下文管理(with) python上下文管理(context),解决的是这样一类 ...

  3. 读书笔记:《流畅的Python》第15章 上下文管理器和else块

    # 第15章 上下文管理器和else块""" 本章内容提要:with语句和上下文管理器for while try语句的else子句 """# ...

  4. python高级学习笔记Day04--01 上下文管理器,生成器,深拷贝,浅拷贝,正则表达式

    with语句 简单又安全 with open('1.txt','w') as f: f.write('hello,world') 上下文管理器 with语句之所以这么强大,背后是由上下文管理器做支撑的 ...

  5. python语言使用什么语句实现上下文管理协议_Python 上下文管理器

    上下文管理器 在使用Python编程中,可以会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后,需要继续执行一些收尾动作. 例如:当需要操作文件或数 ...

  6. python进入上下文管理器_浅谈Python中with(上下文管理器)的用法

    例子一 首先来看一段代码: classFoo(object):def __init__(self):print('实例化一个对象')def __enter__(self):print('进入')def ...

  7. 深入理解 Python 中的上下文管理器

    图|李思瑶 文|MING 提示:前面的内容较为基础,重点知识在后半段. with 这个关键字,对于每一学习Python的人,都不会陌生. 操作文本对象的时候,几乎所有的人都会让我们要用 with op ...

  8. Python 上下文管理器和with块 一

    上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法 把值绑定到目标变量上(as 子 ...

  9. Python中必须知道的知识点:上下文管理器

    在Python中让自己创建的函数.类.对象支持with语句,就实现了上线文管理协议.我们经常使用with open(file, "a+") as f:这样的语句,无需手动调用f.c ...

最新文章

  1. 如何把近十页的论文读成半页?
  2. 大航海陆战助手0.90测试版发布
  3. python数字从大到小排列_Python练习题 005:三个数字由大到小排序输出
  4. 前端学习(3184):ant-design的button介绍按钮属性
  5. oracle数据库主键消失,oracle数据库提示找不到主键
  6. win10+jdk8重启后失效
  7. 通过v$sqlarea,v$sql查询最占用资源的查询
  8. ae效果英文版翻译对照表_AE特效中英名字对照表
  9. mysql添加字段 说明_MYSQL数据库MSSQL 添加字段说明
  10. 谷歌李开复 我的传奇人生源于十句箴言
  11. win10 配置 java8
  12. 网络***的基础教程
  13. sql server 排序规则
  14. EDG:相信奇迹的人,本身就是奇迹。
  15. 数组数据结构的使用与代码编写(一)
  16. 强制应用横竖屏的简单设置
  17. java习题7参考练习及答案_Java基础练习题及详细答案
  18. surface go升级win11
  19. matlab画comsol二维图,标注图在二维和三维绘图组中的运用
  20. 【Opencv实战】AI换背景:朋友结婚没有蓝天白云怎么办?幸亏我急中生智。

热门文章

  1. numpy.argmax详解
  2. 机器学习方法三要素-阿里云大学
  3. 2020互联网校招薪资列表及谈薪注意事项
  4. 【LeetCode从零单排】No 191.Number of 1 Bits(考察位运算)
  5. 如何基于Redis Replication设计并实现Redis-replicator?
  6. Spring Enable annotation – writing a custom Enable annotation
  7. mvn命令安装jar包--转
  8. 深入redis内部--实现字符串
  9. IOS审核的各个状态的时间
  10. apache2 默认端口修改