Python概念-上下文管理协议中的__enter__和__exit__
来源:互联网 发布:cad珠宝设计软件 编辑:程序博客网 时间:2024/06/01 15:16
所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with
__enter__(self):当with开始运行的时候触发此方法的运行
__exit__(self, exc_type, exc_val, exc_tb):当with运行结束之后触发此方法的运行
exc_type如果抛出异常,这里获取异常的类型
exc_val如果抛出异常,这里显示异常内容
exc_tb如果抛出异常,这里显示所在位置
代码示例:(以自己定义的Open类型做示例)
1 # 编辑者:闫龙 2 class Open: 3 def __init__(self,filename,mode,encoding): #在实例化Open的时候传入文件名称,打开方式,编码格式 4 self.filename = filename 5 self.mode = mode 6 self.encoding = encoding 7 #使用系统函数open()传入相应打开文件所需的参数,将文件句柄传递给self.file 8 self.file = open(filename,mode=mode,encoding=encoding)#这里我总感觉是在作弊 9 def read(self):#自己定义read方法10 return self.file.read()#返回self.file文件句柄read()的值11 def write(self,Context):#自己定义write方法12 self.file.write(Context+"\n")#使用self.file文件句柄write方法将内容写入文件13 print(Context,"已写入文件",self.filename)14 # 利用__getattr__(),Attr系列中的getattr,当对象没有找到Open中传递过来的名字时,调用此方法15 def __getattr__(self, item):16 return getattr(self.file,item)#返回self.file文件句柄中,被对象调用,切在Open类中没有的名字17 def __enter__(self):18 return self19 def __exit__(self, exc_type, exc_val, exc_tb):20 self.file.close()21 print("文件已经关闭")22 23 # MyFile = Open("a.txt","w+","utf8")24 # MyFile.write("Egon is SomeBody")25 # MyFile.close()26 # MyFile = Open("a.txt","r+","utf8")27 # print(MyFile.read())28 # MyFile.seek(0)29 # print(MyFile.readline())30 # MyFile.close()31 32 with Open("a.txt","r+","utf8") as egon:33 print(egon.read())
__enter(self)__
负责返回一个值,该返回值将赋值给as子句后面的var_name,通常返回对象自己,即“self”。函数优先于with后面的“代码块”(statements1,statements2,……)被执行。
执行完with后面的代码块后自动调用该函数。with语句后面的“代码块”中有异常(不包括因调用某函数,由被调用函数内部抛出的异常),会把异常类型,异常值,异常跟踪信息分别赋值给函数参数exc_type,exc_val, exc_tb,没有异常的情况下,exc_type,exc_val, exc_tb值都为None。另外,如果该函数返回True、1类值的Boolean真值,那么将忽略“代码块”中的异常,停止执行“代码块”中剩余语句,但是会继续执行“代码块”后面的语句;如果函数返回类似0,False类的Boolean假值、或者没返回值,将抛出“代码块”中的异常,那么在没有捕获异常的情况下,中断“代码块”及“代码块”之后语句的执行
阅读全文
0 0
- Python概念-上下文管理协议中的__enter__和__exit__
- python知识点:上下文管理器[__enter__ 和 __exit__ ]
- python ------------- __enter__(),__exit__(),with
- 7-3 如何让对象支持上下文管理协议,需要定义__enter__, __exit__方法 分别在with开始和结束时候被调用
- Python with解析 __enter__()、__exit__() (十五)
- python with..as.. __call__ __enter__ __exit__
- python contextlib 上下文管理
- Python中的上下文管理器
- Python中的上下文管理器
- Python中的上下文管理器
- python的上下文管理和with语句详解
- 【Python】上下文管理 with...as...
- Python基础(6)- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)
- [00803]让对象支持上下文管理协议
- Php中的调用上下文和解析上下文
- python with和上下文管理工具
- 十六、Python 上下文管理 Context Manager
- python-使对象支持上下文管理-29
- Scala学习笔记(三)scala的函数式编程
- TensorFlow 中的交叉熵(Cross Entropy)
- 神经网络的交叉熵损失函数
- android 获取系统默认路径
- P2P在IPTV中解决数据服务器传输瓶颈
- Python概念-上下文管理协议中的__enter__和__exit__
- UVA-340 Master-Mind Hints
- 【李宏毅老师机器学习课程笔记】第一课:What is Machine Learning, Deep Learning and Structured Learning?
- 排序数组分成若干子数组
- BZOJ1104 [POI2007]洪水pow——并查集+乱搞
- CSS基础-CSS选择器 10
- python实现将程序以守护进程的方式运行
- oracle客户端连接远程服务器的搭建过程
- 游戏测试的面试技巧