![第11课异常处理_第1页](http://file4.renrendoc.com/view/40f61cc642bb3a913686939fca1bcda8/40f61cc642bb3a913686939fca1bcda81.gif)
![第11课异常处理_第2页](http://file4.renrendoc.com/view/40f61cc642bb3a913686939fca1bcda8/40f61cc642bb3a913686939fca1bcda82.gif)
![第11课异常处理_第3页](http://file4.renrendoc.com/view/40f61cc642bb3a913686939fca1bcda8/40f61cc642bb3a913686939fca1bcda83.gif)
![第11课异常处理_第4页](http://file4.renrendoc.com/view/40f61cc642bb3a913686939fca1bcda8/40f61cc642bb3a913686939fca1bcda84.gif)
![第11课异常处理_第5页](http://file4.renrendoc.com/view/40f61cc642bb3a913686939fca1bcda8/40f61cc642bb3a913686939fca1bcda85.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第11课异常处理、异常处理的意义1.异常机制已经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的Python程序会有更好的容错性。没有人能够保证自己写的程序永远不会出错,既是程序没有错误,也不能保证用户按你的意图来输入,另外还有系统的稳定性,计算损坏,网络掉线等诸多情况。二、异常处理机制1.使用try.except捕获异常1)例如,通常在程序运行时,用户可以随意输入,程序不会因为用户的输入不合法而突然间退出,而是向用户提示输入不合法,并请用户再次输入。那么我们就希望有一种强大的if块来解决这个非法输入的问题:f用户输入不合法:alert输入不合法goretryelse:#业务实现代码
2、2)但是“用户输入不合法”这个条件怎么定义呢?我们可以使用正则表达式与用户的输入进行匹配。但现实中不合法的情况非常多,想让程序一次处理所有的错误,我们可以将上面的伪代码修改为:f切正常:#业务实现代码就是:alert输入不合法gotoretry3)但“一切正常”依然是很抽象的,无法转化成代码。在这种情形下Python提供了一种假设:如果程序可以顺利运行,那么就是“一切正常”。由此得出Python异常处现机制的语法结构:try:#业务实现代码except(Error1,Error2,.)ase:alert输入不合法gotoretry4)这样如果执行try块里的业务实现代码是出现异常,系统会自动生
3、成一个异常对象,该异常对象被提交给Python解个过程被称为引被称为引异常。5)当Python解释器收到异常对象时,会寻找处理该异常对象的except块,如果找到合适的except块,则把该过程称为捕捉异常。如果Python解释器找到不捕获异常的except块,则运行时环境终止,Python解释器也将退出。6)不管代码块是否处于try中,或except块中,只要执行该代码时了现了异常,系统总会自动生成一个Error对象。刀try可以有多个except块,这是为了针对不同的异常类提供不同的异常处理方式。当系统发生不同意外情况时,系统会生成不同的异常对象。如果try被执行一次,则try后面只有一个
4、except被执行,除非放在循环中,使用continue开始下一次循环。异常类1)Python的所有异常类的基类是BaseException,但是如果用户果自定义异常,则一概继承Exception类。2)BaseException的主要子类是Exception,所在不管是系统的异常类,还是用户自定义异常类,都是从Exception派生。3)异常捕获实例:importsystry:a=int(sys.argv1)#代表当前运行的程序所提供的第一个参数b=int(sys.argv2)#代表当前运行的程序所提供的第二个参数c=a/bprint(您输入的两个数相除的结果是:,c)exceptIndex
5、Error:print(索引错误:运行程序时输入的参数个数不够)exceptValueError:print(数值错误:程序只能接受整数参数)exceptArithmeticError:print(算术错误)exceptException:print(未知异常)多异常捕获:指一个Except块可以捕获多种类型的异常。例如:importsystry:a=int(sys.argv1)b=int(sys.argv2)c=a/bprint(您输入的两个数相除的结果是:,c)except(IndexError,ValueError,ArithmeticError):print(”程序发生了数组越界、格式
6、错误、算术异常之一)except:#此处的省略也是合法的,一般放在最后print(未知异常)程序发生了数组越界、格式错误、算术异常之一访问异常信息如果程序需要在except块中访问异常对象的相关信息,则可以通过为异常对象声明变量来实现。所在的异常对象都包含如下几个对象和方法:args:该属性返回异常的错误编号和描述字符串errno:该属性返回异常的错误编号strerror:该属性返回异常的描述字符串with_traceback():通过该方法可以处理异常的传播轨迹程序访问异常信息实例:deffoo():try:fis=open(a.txt)exceptExceptionase:print(e.
7、args)print(e.errno)print(e.strerror)foo()#运行结果如下:(2,Nosuchfileordirectory)2Nosuchfileordirectoryelse块1)在Python异常处理流程中还可添加一个else块,当try块没有出现异常时,程序会执行else块。例如:s=input(请输入除数:)请输入除数:5try:result=20/int(s)print(20除以$的结果是:g%(s,result)exceptValueError:print(值错误,您必须输入数值)exceptArithmeticError:print(算术错误,您不能输入0
8、)else:print(没有出现异常)#运行结果如下:20除以5的结果是:4没有出现异常2)实际上大部分语言异常处理都没有else块,可以将else块的内容直接放到try后面。但Python异常处理使用else块也不是多余的语法。因为在else块中的异常不会被except捕获,该异常会传给Python解释器导致程序中止。3)如果希望某段代码的异常,能被后面的except捕获,那么就应该放在try块中;如果不希望被except捕获,就应该放在else块中。6.使用finally回收资源1)为了能够保证回收try块中打开的一些物理资源(如数据库连接、网络连接和磁盘文件),异常处理机制提供了fina
9、lly块。2)Python完整的异常处理语法结构如下:try:#业务实现代码exceptSubExceptionlase:#异常处理块1exceptSubException2ase:#异常处理块2else:#正常处理块finally:#资源回收块三、使用raise引发异常如果程序中数据或执行与现实的需求不符,但是系统不会判断这样的异常,只能程序员来决定是否引发异常,此时可以使用raise语句来完成这种自行引发的异常。raise语句三种常见的用法:单独一个raise,该语句引发当前上下文中捕获的异常,或默认引发RuntimeError异常。raise后带一个异常类,该语句引发指定的异常类。rai
10、se后带一个异常对象,该语句引发制定的异常对象。以上三种最终都是引发一个异常实例,每次只能引发一个异常实例。用户引发异常的两种方式:raise和except,例如:defmain():try:#使用try.except来捕获异常,此时出现异常也不会传给调用它的main()函数mtd(3)exceptExceptionase:print(程序出现异常类是:,e)mtd(3)#不使用try.except来捕获异常,异常会传播并导致程序中止defmtd(a):讦a0:raiseValueError(a的值大于0,不符合要求)main()四、异常的传播轨迹异常只要没有被完全捕获,异常就会从发生异常的函
11、数或方法向外传播,首先传给该函数或方法的调用者,然后,直到传给Python解释器,Python解释器就会中止程序,并打印异常传播的轨迹信息。所以通常我们看到大段的异常信息,并不一定发生很多严重的问题,可能只个异常引发的。Python专门提供trackback模块来处理异常传播的轨迹,两种常用的方法是:trackback.print_exc():将异常传播轨迹输出到控制台或文件中。format_exc():将异常传播轨迹转换成字符串。五、异常处理规则1.不要过度使用异常处理,注意以下两点:1)需要编写错误处理代码,而不是简单的用异常来代替处理。2)不能用异常来代替流程控制。不要使用过度庞大的try块:try块越大,发生异常的可能性就越大。而且在庞大的try块后势必有大量的except块,这时要判断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球七叶神安片行业调研及趋势分析报告
- 2025-2030全球医疗器械消毒产品行业调研及趋势分析报告
- 2025年全球及中国缺氧帐篷行业头部企业市场占有率及排名调研报告
- 2025年全球及中国有机空穴传输材料行业头部企业市场占有率及排名调研报告
- 2025-2030全球连续式锂电池热解炉行业调研及趋势分析报告
- 竞业限制合同协议书
- 家具房屋租赁合同书
- 2025危险废物委托处置合同
- 房地产借款合同
- 提高谈判技巧的训练课程
- 国有资产管理法律责任与风险防控
- 未婚生子的分手协议书
- 变更监事章程修正案范例
- 北京小客车指标租赁协议五篇
- 输液室运用PDCA降低静脉输液患者外渗的发生率品管圈(QCC)活动成果
- YY/T 0681.2-2010无菌医疗器械包装试验方法第2部分:软性屏障材料的密封强度
- GB/T 20472-2006硫铝酸盐水泥
- 烟气管道阻力计算
- 城乡环卫一体化保洁服务迎接重大节日、活动的保障措施
- 医院-9S管理共88张课件
- 高考作文复习:议论文论证方法课件15张
评论
0/150
提交评论