__enter__ 和 __exit__上下文管理协议
class F:
def __init__(self,n):
self.n = n def __enter__(self):
print('执行enter')
return self def __exit__(self, exc_type, exc_val, exc_tb):
print('执行exit')
print('exc_type-->',exc_type) #exc_type--> <class 'NameError'>
print('exc_val-->',exc_val) #exc_val--> name 'xxxxxxxxxxxxxxxxxxxxxxxxx' is not defined
print('exc_tb-->',exc_tb) #exc_tb--> <traceback object at 0x02EB25F8>
return True #exc_type exc_val exc_tb;return True就是把上面这3个异常关闭了 with F('a.txt') as f: #触发__enter__运行,并且返回了return self
print(f) #<__main__.F object at 0x037FB4D0>,然后会接着运行__exit__
print(xxxxxxxxxxxxxxxxxxxxxxxxx) #给个错误的打印 触发了__exit__,后面的代码不会运行了
print('----------->')
print('----------->')
print('----------->')
print('----------->')
print('没有执行')
总结:
1 没有异常的情况下,整个代码块运行完毕后在触发__exit__,它的的三个值全部为none
2 有异常的情况下面,从异常出现的位置直接触发__exit__
a: 如果__exit__返回值为True,代表关闭异常
b: 如果不为True,代表释放出异常
c: __exit__运行完毕就代表整个with语句执行完毕
用途或者说好处:
1.使用with语句的目的就是把代码块放入with中执行,with结束后,自动完成清理工作,无须手动干预
2.在需要管理一些资源比如文件,网络连接和锁的编程环境中,可以在__exit__中定制自动释放资源的机制,你无须再去关系这个问题,这将大有用处
__enter__ 和 __exit__上下文管理协议的更多相关文章
- __enter__,__exit__上下文管理协议
上下文管理协议__enter__,__exit__ 用途或者说好处: 1.使用with语句的目的就是把代码块放入with中执行,with结束后,自动完成清理工作,无须手动干预 2.在需要管理一些资源比 ...
- Python 上下文管理协议中的__enter__和__exit__基本理解
所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_va ...
- 上下文管理协议with_open,__enter__和__exit__(三十八)
在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__ent ...
- python - 上下文管理协议(with + __enter__ + __exit__)
上下文管理协议: with + __enter__ + __exit__ #上下问管理协议: #with + __enter__ + __exit__ class Test(): def __init ...
- Python概念-上下文管理协议中的__enter__和__exit__
所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_va ...
- Python上下文管理协议:__enter__和__exit__
上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语 ...
- python基础----实现上下文管理协议__enter__和__exit__
我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明_ ...
- 上下文管理协议with open as
我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明_ ...
- 用python优雅打开文件及上下文管理协议
有次面试被问到如何优雅地打开一个文件? 那就是用with语句,调用过后可以自动关闭. 但是为什么使用with语句就可以自动关闭呢,原因就是上下文管理协议. 上下文管理协议:包含方法 __e ...
随机推荐
- 【转】Win32程序中调用ActiveX控件
#include "stdafx.h" #include <iostream> #include <windows.h> #include <comd ...
- asp.net mvc + dapper(ORM框架) + easyui框架简洁的信息管理项目
1.目录结构: 2.效果图: 3.IndexController控制器: using System; using System.Collections; using System.Collection ...
- vue.js--遇到的一些错误
1. <sapn> - did you register the component correctly? For recursive components, make sure to p ...
- 操作系统口令认证,sysdba本地登录需要输入密码
开发测试人员,反馈,sqlplus / as sysdba 登陆需要输入密码? 本篇文档流程: 1.场景还原 2.问题处理 3.相关问题介绍 一.场景还原 1)配置SQLNET.ora配置文件,配置操 ...
- myelipse与maven结合配置
添加插件 指定maven中jar包默认仓库地址 maven中debug模式中断点关联不到项目代码的问题 解决方法参考文章:https://blog.csdn.net/urnot/article/det ...
- linux服务器架设--学习笔记
PS: Centos是属于红帽子的操作系统
- Office常用技巧
文章目录 大小写切换 把word里的自动编号转换为真实的文本 大小写切换 word中修改单词/句子的大小写:选中文字,按shift+F3,可在全大写.全小写.首字符大写间切换. 把word里的自动编号 ...
- design_patterns_in_typescript 学习
https://github.com/torokmark/design_patterns_in_typescript Creational Singleton [A class of which on ...
- 项目管理软件 GanttProject 节日表
项目管理软件 GanttProject 节日表 GanttProject 是一款项目管理软件,对比一些商业项目管理软件一点不差,有些还更强大,比如以下的节假日自动选择. 文件地址在:C:\Progra ...
- @RequestParam接收解析不到 POST 提交的 数据
1.使用postman或者其他发送请求模拟器进行模拟访问,需要指定Headers为Content-Type:application/x-www-form-urlencoded;指定body类型为x-w ...