Python8 异常处理结构与程序调试ppt课件.pptx
《Python8 异常处理结构与程序调试ppt课件.pptx》由会员分享,可在线阅读,更多相关《Python8 异常处理结构与程序调试ppt课件.pptx(33页珍藏版)》请在三一办公上搜索。
1、第8章 异常处理结构与程序调试,异常(exception),简单地说,异常是指程序运行时引发的错误。引发错误的原因有很多,例如除零、下标越界、文件不存在、网络异常、类型错误、名字错误、字典键错误、磁盘空间不足,等等。如果这些错误得不到正确的处理将会导致程序终止运行合理地使用异常处理结果可以使得程序更加健壮,具有更强的容错性,不会因为用户不小心的错误输入或其他运行时原因而造成程序终止。也可以使用异常处理结构为用户提供更加友好的提示。程序出现异常或错误之后是否能够调试程序并快速定位和解决存在的问题也是程序员综合水平和能力的重要体现方式之一。,8.1 什么是异常,语法错误和逻辑错误不属于异常(运行时
2、错误),但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象。当Python检测到一个错误时,解释器就会指出当前流已无法继续执行下去,这时候就出现了异常。异常是指因为程序出错而在正常控制流以外采取的行为。异常分为两个阶段:第一个阶段是引起异常发生的错误;第二个阶段是检测并处理阶段。不建议使用异常来代替常规的检查,如if.else判断。应避免过多依赖于异常处理机制。当程序出现错误,python会自动引发异常,也可以通过raise显式地引发异常。,8.2 Python中的异常类,下面列出了常用的异常类,抛出异常raise语句,主动抛出异常定义自己的异常类时;或者需要抛出异常时。r
3、aise语法expression:必须是一个异常类,或异常类的实例对象;如果为一个异常类,则相当于首先创建一个该类的实例,然后抛出该异常对象from expression2:给出了将两个异常连接起来的方法,表示异常是由于另一个expression2引起的。,raise expression from expression2,raise Exception raise Exception(foo occurred!)raise Exception(foo occurred!) from Exception(another error occured!),自定义异常类,下面的例子演示了自定义的异常
4、类必须继承Exception类或者其子类:Exception为所有异常类的基类;,class MyError(Exception): def _init_(self, value): self.value = value def _str_(self): return repr(self.value),try: raise MyError(2*2)except MyError as e: print(My exception occurred, e) raise,My exception occurred 4Traceback (most recent call last): File C:/
5、Users/dlmao/PycharmProjects/pythonClass/exception_demo.py, line 14, in raise MyError(2*2)MyError: 4,8.3 Python中的异常处理结构,第一种方式没有except块执行代码不管有没有异常执行finally块第二种方式至少有except块,else和finally可选expression应该为异常类或者异常类的元组,表示其中任一异常出现,try: finally: try: except expression as identifier: # 至少一次,在多次出现时不带表达式except应该是最
6、后一个。按序匹配找到对应的exception为止 else: # 可选的,在没有异常出现在前面的异常都没有出现时执行 finally: # 可选的,不管异常有没有都要执行 ,8.3 Python中的异常处理结构,常见的异常处理结构try.except结构try.except .else结构带有多个except的try结构try.except .finally结构,try: finally: try: except expression as identifier: # 至少一次,在多次出现时不带表达式except应该是最后一个。按序匹配找到对应的exception为止 else: # 可选的,
7、在没有异常出现在前面的异常都没有出现时执行 finally: # 可选的,不管异常有没有都要执行 ,8.3.1 try.except结构,这是最基本的处理结构;具有两种形式。,代码处理形式一try: try_block #被监控的代码except Exception1,reason: except_block #异常处理代码,代码处理形式二try: .except BaseException,e: except_block优势:能够处理所有的异常,建议尽量显式捕捉可能会出现的异常,并编写具有针对性的代码;最后一个except用来捕捉BaseException。,try.except :示例1,
8、 while True: try: x = int(input(Please enter a number: ) break except ValueError: print(That was no valid number. Try again.),Please enter a number: aThat was no valid number. Try again.Please enter a number: bThat was no valid number. Try again.Please enter a number: cThat was no valid number. Try
9、again.Please enter a number: 10,try.except :示例2, try: raise Exception(spam, eggs)except Exception as inst: print(type(inst) # the exception instance print(inst.args) # arguments stored in .args print(inst) # _str_ allows args to be printed directly, # but may be overridden in exception subclasses x,
10、 y = inst.args # unpack args print(x =, x) print(y =, y)print(x)print(inst),expression as instanceinstance为异常对象注意:在exception block并不是一个新的scope,但是instance在退出该block后不可用,(spam, eggs)(spam, eggs)x = spamy = eggsspamtraceback (most recent call last):UnboundLocalError: local variable inst referenced befor
11、e assignment,8.3.2 try.except .else:示例1,分析上述的代码输入错误:例如输入的数值超出了正常的序号,会产生异常;执行红色print语句,并继续循环;但是输入了非数值?其他的情况:输出列表中正确的字符串,并且退出循环。,a_list = China, America, England, Francewhile True: print(请输入字符串的序号) n = int(input() try: print(a_listn) except IndexError: print(列表元素的下标越界,请重新输入字符串的序号) else: break,def exce
12、pt_else_1(): a_list = China, America, England, France while True: print(请输入字符串的序号) try: n = int(input() print(a_listn) except IndexError: print(列表元素的下标越界,请重新输入字符串的序号) except ValueError: print(输入不是十进制整数,请重新输入字符串的序号) else: break,try.except .else:示例2,分析功能:读取并输出文件的内容。在出现例外的情况下,执行红色的print语句后,结束程序的执行;在没有例
13、外的情况下,执行else块的内容。,for arg in sys.argv1: try: f = open(arg, r) except IOError: print(cannot open, arg) else: print(arg, has, len(f.readlines(), lines) f.close(),8.3.3 带有多个except的try结构,功能:根据实际产生的例外,执行其中的例外程序块。,try: try_block #被监控的语句except Exception1: except_block_1 #处理异常1的语句except Exception2: except_b
14、lock_2 #处理异常2的语句.,带有多个except的try:示例1,典型例子:除法。,try: x=int(input(请输入被除数: ) y=int(input(请输入除数: ) z=float(x) / yexcept ZeroDivisionError: print(除数不能为零)except TypeError: print(被除数和除数应为数值类型)except NameError: print(变量不存在)else: print(x, /, y, =, z),带有多个except的try :示例2,当有多个except块而且处理相同时,可以使用元组的形式处理。,import
15、systry: f = open(sample.txt) s = f.readline() i = int(s.strip()except OSError as err: print(OS error: 0.format(err)except ValueError: print(Could not convert data to an integer.)except: print(Unexpected error:, sys.exc_info()0) raise,import systry: f = open(sample.txt) s = f.readline() i = int(s.str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python8 异常处理结构与程序调试ppt课件 异常 处理 结构 程序 调试 ppt 课件
链接地址:https://www.31ppt.com/p-1377819.html