python中with的用法,上下文管理器
生活随笔
收集整理的这篇文章主要介绍了
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的用法,上下文管理器的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: reduce_sum()中的reduct
- 下一篇: python中重要的模块asyncio