python上下文管理协议
2018-03-22 22:34
399 查看
当使用with时,会产生上下文管理协议,主要是enter(), exit()方法起作用
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语句的执行完毕
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) # 为__enter__()的返回值 print(asdfsaasdfasdfasdfasdfasfasdfasdfasdfasdfasfdasfd) #触发__exit__ print(f.name) print('-----------------') print('-----------------') print('000000000000000000000000000000000000000000000')
相关文章推荐
- Python概念-上下文管理协议中的__enter__和__exit__
- Python系列之 - 上下文管理协议
- Python 让对象支持上下文管理协议
- python基础----实现上下文管理协议__enter__和__exit__
- Python基础(6)- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)
- python-使对象支持上下文管理-29
- 【Python】上下文管理 with...as...
- python contextlib 上下文管理
- python 学习第十一课 上下文管理 paramiko 堡垒机 mysql操作
- 我要学python之上下文管理
- python with和上下文管理工具
- 8.python之上下文管理协议
- [00803]让对象支持上下文管理协议
- 十六、Python 上下文管理 Context Manager
- python的上下文管理(context)(1)
- python深入笔记--特殊方法\上下文管理\__dict__\property()
- Python上下文管理—with语句的用法
- python with语句上下文管理的两种实现方法
- 详解Python中contextlib上下文管理模块的用法
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程