版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
异常处理的其他操作教师北京信息职业技术学院马东波商务数据分析与应用专业教学资源库12自定义异常目录CONTENTSwith语句13上下文管理器01自定义异常21自定义异常3创建一个继承Exception类的子类,就是自定义异常类。当遇到自己设定的错误时,使用raise语句抛出自定义的异常。
02with语句42with语句5现在有一个需求,打开foo.txt文本文件,读取完所有的数据以后关闭文件。
示例代码如下:file=open(“/tmp/foo.txt”)
#打开文件data=file.read()
#读取数据file.close()
#关闭文件文件读取出现问题怎么办?忘记关闭文件出现问题怎么办?2with语句6为了避免在文件读取的过程中产生这些问题,可以在上述示例中增加处理异常的语句,
加强版本如下:file=open("/tmp/foo.txt")try:
data=file.read()finally:
file.close()该代码虽然解决了产生异常的可能,但是这段代码过于冗长。此时,在示例中使用with语句处理上下文环境产生的异常,具体如下。withopen("/tmp/foo.txt")asfile:
data=file.read()2with语句7Python2.5开始,引入了with语句,with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源。2with语句8withcontext_expr[asvar]:with_bodywith语句格式context_expr:需要返回一个上下文管理器对象,该对象并不赋值给as子句中的var。var:可以是变量或者元组。with_body:with语句包裹的代码块。2with语句9with语句执行过程:(1)执行context_expr,生成上下文管理context_manager;(2)调用上下文管理器的__enter__()方法,如果使用了as子句,就把__enter__()方法的返回值赋值给as子句中的var;(3)执行语句体with_body。(4)无论在执行的过程中是否发生异常,都会执行上下文管理器的__exit__()方法。该方法负责执行程序的“清理”工作,如释放资源等。2with语句10with语句执行过程:(5)如果执行过程中没有出现异常,或者语句体中执行了break、continue或者return语句,则以None作为参数调用__exit__()方法;如果执行过程中出现异常,则会使用sys.exc_info得到的异常信息为参数调用__exit__()方法。(6)出现异常时,如果__exit__()方法返回的结果为False,则会重新抛出异常,让with之外的语句逻辑来处理异常,这是通用做法;如果返回True,则忽略异常,不再对异常进行处理。03上下文管理器113上下文管理器12要想使用with语句进行工作,前提是要有上下文管理器。上下文管理器是Python2.5开始支持的一种语法,用于规定某个对象的使用范围,一旦进入或者离开使用范围,会有特殊的操作被调用。3上下文管理器131.
上下文管理协议__enter__(self):进入上下文管理器时调用此方法,其返回值被放入with-as语句中as说明符指定的变量中。_exit__(self,type,value,tb):离开上下文管理器调用此方法。如果有异常出现,type、value、tb分别为异常的类型、值和追踪信息;如果没有异常,3个参数均设为None。此方法返回值为True或者False,分别指示被引发的异常得到了还是没有得到处理,如果返回False,引发的异常会被传递出上下文。3上下文管理器142.
上下文管理器支持上下文管理协议的对象,用于实现__enter__()和__exit__()方法。上下文管理器定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。通常情况下,使用with语句调用上下文管理器,也可以通过直接调用其方法来使用。3上下文管理器153.运行时上下文由上下文管理器创建,通过上下文管理器的__enter__()和__exit__()方法实现。其中,__enter__()方法在语句体执行之前进入运行时上下文,__exit__()在语句体执行完后从运行时上下文退出。17总结上下文管理器with语句自定义异常18参考文献
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度门窗行业市场推广与宣传合同4篇
- 二零二五年智慧社区安防监控系统安装合同5篇
- 二零二五年度城市广场场地租赁合同2篇
- 2025年度全国棉花运输服务合同范本4篇
- 二零二五年外墙涂料翻新工程施工安全监管与隐患排查合同3篇
- 2025年度特种用途面包车租赁合同范本4篇
- 2025年度企业员工股票购买贷款合同终止后贷款处理协议
- 二零二五年度教育培训机构教师绩效管理与聘用合同
- 2025年度著作权登记及维权代理服务合同范本3篇
- 2025年度时尚行业模特经纪代理服务合同4篇
- 运动技能学习与控制课件第十一章运动技能的练习
- 虫洞书简全套8本
- 射频在疼痛治疗中的应用
- 四年级数学竖式计算100道文档
- “新零售”模式下生鲜电商的营销策略研究-以盒马鲜生为例
- 项痹病辨证施护
- 职业安全健康工作总结(2篇)
- 怀化市数字经济产业发展概况及未来投资可行性研究报告
- 07FD02 防空地下室电气设备安装
- 教师高中化学大单元教学培训心得体会
- 弹簧分离问题经典题目
评论
0/150
提交评论