Python系列之 - 上下文管理协议
2018-04-13 13:06
405 查看
with obj as f: '代码块' 1.with obj ----》触发obj.__enter__(),拿到返回值 2.as f----->f=返回值、 3.with obj as f 等同于 f=obj.__enter__() 4.执行代码块 一:没有异常的情况下,整个代码块运行完毕后去触发__exit__,它的三个参数都为None 二:有异常的情况下,从异常出现的位置直接触发__exit__ a:如果__exit__的返回值为True,代表吞掉了异常 b:如果__exit__的返回值不为True,代表吐出了异常 c:__exit__的的运行完毕就代表了整个with语句的执行完毕
class Foo: def __init__(self,name): self.name=name def __enter__(self): print('执行enter') return self def __exit__(self, exc_type, exc_val, exc_tb): print('执行exit') print(exc_type) print(exc_val) print(exc_tb) return True with Foo('a.txt') as f: print(f) print(asdfsaasdfasdfasdfasdfasfasdfasdfasdfasdfasfdasfd) #触发__exit__ print(f.name) print('-----------------') print('-----------------') print('-----------------') print('-----------------') print('000000000000000000000000000000000000000000000')
相关文章推荐
- python基础----实现上下文管理协议__enter__和__exit__
- Python基础(6)- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)
- Python 让对象支持上下文管理协议
- Python概念-上下文管理协议中的__enter__和__exit__
- python上下文管理协议
- python第三方库系列之二十一--python django的权限管理库
- 【脚本语言系列】关于Python系统管理,你需要知道的事
- Python属性、方法和类管理系列之----描述符类
- 【开发环境系列】关于conda管理Python开发环境,你需要知道的事
- Python上下文管理—with语句的用法
- python深入笔记--特殊方法\上下文管理\__dict__\property()
- 详解Python中contextlib上下文管理模块的用法
- python的上下文管理(context)(1)
- Python属性、方法和类管理系列之----属性初探
- Python属性、方法和类管理系列之----__slots__属性
- python with和上下文管理工具
- Python之上下文管理
- 【脚本语言系列】关于Python进程线程管理系统模块,你需要知道的事
- Python&Django学习系列之-激活管理界面
- python with语句上下文管理的两种实现方法