- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Python程序设计-第九章幻灯片
异常处理 异常处理是一种出错处理的机制。当程序中出现某些 异常的 状况的时候,异常就发生了。例如,当想要读某个文件的时候,而那个文件不存在。或者在程序运行的时候,不小心除了0。上述这些情况可以使用异常来处理。 假如程序中有一些无效的(产生异常)语句,会怎么样呢?Python会引发并告知那里有一个错误,从而处理这样的情况。 错误信息 异常信息分为两个部分,冒号前面的是异常类型,之后是对此的简单说明。其它的信息则指出在程序的什么地方出错了。 当异常产生时,如果没有代码来处理它,Python对其进行缺省处理,输出一些异常信息并终止程序。 异常捕获 程序在执行的过程中产生异常,但不希望程序终止执行,这时就需要用try和except 语句对异常进行捕获然后处理。比如,提示用户输入文件名,然后打开文件。若文件不存在,我们也不想程序就此崩溃,处理异常处理就成了关键的部分。 异常捕获 首先执行statements1,如果没有异常发生,那么一切正常,就像没有try语句一样,继续执行后面的语句 如果在执行statements1时发生了异常,那么就把异常类型和except语句后面的ExceptionType比较 如果相同就执行statements2;并继续执行异常处理后的所有语句 如果不相同就直接返回,把异常抛给函数的调用者,然后一级一级的向上抛,直到有try语句捕获了异常 如果没有任何try语句进行有效的捕获,那么程序就异常退出 异常捕获 可见,异常是另一种函数返回方式,C语言或者其他没有异常机制的语言,函数只有通过返回值指明函数出错,所以每一级函数都要检查函数的返回值。 异常机制就是提供除了返回值之外的另一种出错处理方法。这种方法支持错误的向上冒泡,如果某一级函数不知道该怎么处理错误,那么就不处理,留给更上一级函数处理。大部分库中的模块的出错处理大多数都是抛出异常。 异常捕获 try后面可以跟多种形式的分句: try语句分句形式 try...finally finally语句的意思是:无论是否发生异常,还是return语句返回,finally子句statements2都会执行 这种方法适合于释放资源。如果一个函数有多个地方return,那么就要在每一个return之前编写几乎同样的释放资源的代码,如关闭文件、关闭网络连接等等。finally的方法提供了一个函数返回之前,执行一些代码来回收资源,不管函数返回是由于return语句还是由于没有被捕获的异常 抛出异常 raise语句用于抛出异常,格式如下: 三个表达式都是可选的,如果一个表达式都没有,raise则把最近的一次异常重新触发,如果没有最近的异常则抛出TypeError的异常 如果至少有一个表达式的话,raise语句则计算表达式而得到三个对象,对于省略的表达式用None填充 如果第一个对象是一个对象实体,则异常的类型就是对象的类型,对象本身是异常的值;第二、三个对象必须为空 如果第一个对象是类,那它就是异常的类型。第二个对象被用来决定异常的值:如果是类的实例对象,则对象就是异常的值;如果是个元组,就作为类构造器的参数列表;如果为None,则空参数传入类构造器,如果为其他单个对象,则作为单个参数传入类构造器。实例对象就会根据参数列表传入类构造器而生成,并作为异常的值。 如果第三个对象存在并不为None,它必须是一个traceback对象,用于跟踪当前发生异常的栈帧(很少用)。 抛出异常 在抛出异常时,可以是任何对象,用于详细描述错误类型;但一般要求是Exception类的子类 抛出异常 在except中,只要ExceptionType和抛出的对象类型一致,就可以捕获这个异常。类型一致指:对象是此类型的一个实例,如果一个对象所属的类继承了其他的类,那么这个对象就可以是多类型的实体,这些类型包括对象所属的类的父类,父类的父类...等 assert语句 Python还包括了assert语句,其实是条件式的raise语句: 如果test计算为假,Python就会触发AssertionError异常:data项是异常对象的值。 assert是附加功能,如果使用-O命令行标志位,就会忽略所有的assert语句,即__debug__为0;系统缺省情况下自动为1 异常使用 抛出和捕获异常提供了一种方便的出错处理机制。函数不用再通过特殊返回值来通知上一级函数(函数的调用者)发生了错误,而是通过raise异常的方式 返回值就是函数正常返回的时候应该返回的东西 这种方法可以加快开发速度,开发初期,可以不用处理任何错误,只按照正常结果进行编码,等原型开发完成后再加入异常处理的代码 本章结束,谢谢! Python程序设计Pro
文档评论(0)