Python程序设计-第九章

上传人:jiups****uk12 文档编号:53847002 上传时间:2018-09-05 格式:PPT 页数:16 大小:173KB
返回 下载 相关 举报
Python程序设计-第九章_第1页
第1页 / 共16页
Python程序设计-第九章_第2页
第2页 / 共16页
Python程序设计-第九章_第3页
第3页 / 共16页
Python程序设计-第九章_第4页
第4页 / 共16页
Python程序设计-第九章_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《Python程序设计-第九章》由会员分享,可在线阅读,更多相关《Python程序设计-第九章(16页珍藏版)》请在金锄头文库上搜索。

1、Python程序设计 Programming in Python,主讲:庞胜利,2,第九章 异常处理,异常处理 异常捕获 try.finally 抛出异常 异常机制使用,异常处理,异常处理是一种出错处理的机制。当程序中出现某些 异常的 状况的时候,异常就发生了。例如,当想要读某个文件的时候,而那个文件不存在。或者在程序运行的时候,不小心除了0。上述这些情况可以使用异常来处理。假如程序中有一些无效的(产生异常)语句,会怎么样呢?Python会引发并告知那里有一个错误,从而处理这样的情况。, print 2/0 Traceback (most recent call last):File “, l

2、ine 1, in ZeroDivisionError: integer division or modulo by zero,错误信息,异常信息分为两个部分,冒号前面的是异常类型,之后是对此的简单说明。其它的信息则指出在程序的什么地方出错了。当异常产生时,如果没有代码来处理它,Python对其进行缺省处理,输出一些异常信息并终止程序。, print 2/0 Traceback (most recent call last):File “, line 1, in ZeroDivisionError: integer division or modulo by zero,异常捕获,程序在执行的过

3、程中产生异常,但不希望程序终止执行,这时就需要用try和except 语句对异常进行捕获然后处理。比如,提示用户输入文件名,然后打开文件。若文件不存在,我们也不想程序就此崩溃,处理异常处理就成了关键的部分。,异常捕获,首先执行statements1,如果没有异常发生,那么一切正常,就像没有try语句一样,继续执行后面的语句如果在执行statements1时发生了异常,那么就把异常类型和except语句后面的ExceptionType比较如果相同就执行statements2;并继续执行异常处理后的所有语句如果不相同就直接返回,把异常抛给函数的调用者,然后一级一级的向上抛,直到有try语句捕获了异

4、常如果没有任何try语句进行有效的捕获,那么程序就异常退出,try:except ExceptionType:,异常捕获,可见,异常是另一种函数返回方式,C语言或者其他没有异常机制的语言,函数只有通过返回值指明函数出错,所以每一级函数都要检查函数的返回值。异常机制就是提供除了返回值之外的另一种出错处理方法。这种方法支持错误的向上冒泡,如果某一级函数不知道该怎么处理错误,那么就不处理,留给更上一级函数处理。大部分库中的模块的出错处理大多数都是抛出异常。,异常捕获,try后面可以跟多种形式的分句:,try:except ExceptionType1, e1:except (ExceptionTyp

5、e2, ExceptionType3):except:else:finally:,try语句分句形式,try.finally,finally语句的意思是:无论是否发生异常,还是return语句返回,finally子句statements2都会执行这种方法适合于释放资源。如果一个函数有多个地方return,那么就要在每一个return之前编写几乎同样的释放资源的代码,如关闭文件、关闭网络连接等等。finally的方法提供了一个函数返回之前,执行一些代码来回收资源,不管函数返回是由于return语句还是由于没有被捕获的异常,try:finally:, def fun(): . try: . pri

6、nt “ok“ . return 1 . finally: . print “clean up“ . fun() ok clean up 1 ,抛出异常,raise语句用于抛出异常,格式如下:三个表达式都是可选的,如果一个表达式都没有,raise则把最近的一次异常重新触发,如果没有最近的异常则抛出TypeError的异常如果至少有一个表达式的话,raise语句则计算表达式而得到三个对象,对于省略的表达式用None填充如果第一个对象是一个对象实体,则异常的类型就是对象的类型,对象本身是异常的值;第二、三个对象必须为空如果第一个对象是类,那它就是异常的类型。第二个对象被用来决定异常的值:如果是类的

7、实例对象,则对象就是异常的值;如果是个元组,就作为类构造器的参数列表;如果为None,则空参数传入类构造器,如果为其他单个对象,则作为单个参数传入类构造器。实例对象就会根据参数列表传入类构造器而生成,并作为异常的值。如果第三个对象存在并不为None,它必须是一个traceback对象,用于跟踪当前发生异常的栈帧(很少用)。,raise expression1, expression2, expression3,抛出异常,在抛出异常时,可以是任何对象,用于详细描述错误类型;但一般要求是Exception类的子类,class ShortInputException:A user-defined e

8、xception class.def _init_(self, length, atleast):self.length = lengthself.atleast = atleast try:s = raw_input(Enter something )if len(s) 3:raise ShortInputException(len(s), 3) except ShortInputException, x:print ShortInputException: The input was of length %d, was expecting at least %d % (x.length,

9、x.atleast) else:print No exception was raised.,抛出异常,在except中,只要ExceptionType和抛出的对象类型一致,就可以捕获这个异常。类型一致指:对象是此类型的一个实例,如果一个对象所属的类继承了其他的类,那么这个对象就可以是多类型的实体,这些类型包括对象所属的类的父类,父类的父类.等,assert语句,Python还包括了assert语句,其实是条件式的raise语句:如果test计算为假,Python就会触发AssertionError异常:data项是异常对象的值。assert是附加功能,如果使用-O命令行标志位,就会忽略所有的assert语句,即_debug_为0;系统缺省情况下自动为1,assert , = if _debug_:if not :raise AssertionError, ,异常使用,抛出和捕获异常提供了一种方便的出错处理机制。函数不用再通过特殊返回值来通知上一级函数(函数的调用者)发生了错误,而是通过raise异常的方式返回值就是函数正常返回的时候应该返回的东西这种方法可以加快开发速度,开发初期,可以不用处理任何错误,只按照正常结果进行编码,等原型开发完成后再加入异常处理的代码,本章结束,谢谢!,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号