python中with的用法,上下文管理器
一、上下文管理器
含有__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的用法,上下文管理器相关推荐
- python上下文管理关键字_详解 Python 中的 with 与 上下文管理器
with 这个关键字,对于每一学习Python的人,都不会陌生. 操作文本对象的时候,几乎所有的人都会让我们要用 with open ,这就是一个上下文管理的例子.你一定已经相当熟悉了,我就不再废话了 ...
- python sqlite3事务_python使用上下文管理器实现sqlite3事务机制
如题,本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制. 1.python上下文管理(with) python上下文管理(context),解决的是这样一类 ...
- 读书笔记:《流畅的Python》第15章 上下文管理器和else块
# 第15章 上下文管理器和else块""" 本章内容提要:with语句和上下文管理器for while try语句的else子句 """# ...
- python高级学习笔记Day04--01 上下文管理器,生成器,深拷贝,浅拷贝,正则表达式
with语句 简单又安全 with open('1.txt','w') as f: f.write('hello,world') 上下文管理器 with语句之所以这么强大,背后是由上下文管理器做支撑的 ...
- python语言使用什么语句实现上下文管理协议_Python 上下文管理器
上下文管理器 在使用Python编程中,可以会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后,需要继续执行一些收尾动作. 例如:当需要操作文件或数 ...
- python进入上下文管理器_浅谈Python中with(上下文管理器)的用法
例子一 首先来看一段代码: classFoo(object):def __init__(self):print('实例化一个对象')def __enter__(self):print('进入')def ...
- 深入理解 Python 中的上下文管理器
图|李思瑶 文|MING 提示:前面的内容较为基础,重点知识在后半段. with 这个关键字,对于每一学习Python的人,都不会陌生. 操作文本对象的时候,几乎所有的人都会让我们要用 with op ...
- Python 上下文管理器和with块 一
上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法 把值绑定到目标变量上(as 子 ...
- Python中必须知道的知识点:上下文管理器
在Python中让自己创建的函数.类.对象支持with语句,就实现了上线文管理协议.我们经常使用with open(file, "a+") as f:这样的语句,无需手动调用f.c ...
最新文章
- 如何把近十页的论文读成半页?
- 大航海陆战助手0.90测试版发布
- python数字从大到小排列_Python练习题 005:三个数字由大到小排序输出
- 前端学习(3184):ant-design的button介绍按钮属性
- oracle数据库主键消失,oracle数据库提示找不到主键
- win10+jdk8重启后失效
- 通过v$sqlarea,v$sql查询最占用资源的查询
- ae效果英文版翻译对照表_AE特效中英名字对照表
- mysql添加字段 说明_MYSQL数据库MSSQL 添加字段说明
- 谷歌李开复 我的传奇人生源于十句箴言
- win10 配置 java8
- 网络***的基础教程
- sql server 排序规则
- EDG:相信奇迹的人,本身就是奇迹。
- 数组数据结构的使用与代码编写(一)
- 强制应用横竖屏的简单设置
- java习题7参考练习及答案_Java基础练习题及详细答案
- surface go升级win11
- matlab画comsol二维图,标注图在二维和三维绘图组中的运用
- 【Opencv实战】AI换背景:朋友结婚没有蓝天白云怎么办?幸亏我急中生智。