Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务8 系统异常处理_第1页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务8 系统异常处理_第2页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务8 系统异常处理_第3页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务8 系统异常处理_第4页
Python程序设计项目化教程(AI助学)(微课版)(第2版)- 课件 任务8 系统异常处理_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务8:系统异常处理Python程序设计1、任务描述目录2、技术准备Python程序设计3、任务实施1、任务描述本任务主要完成当用户输入的成绩数据不合法、数据类型不匹配等异常的处理,使程序不仅能够处理正确输入,对一些非法输入也能够正常处理,从而提高系统的健壮性。完成本任务需要了解和掌握Python中异常处理机制和各种异常处理结构的使用。2.1错误类型技术准备2.2异常类Python程序设计2.3异常捕获和处理2.1错误类型在编制程序时,错误的产生是不可避免的。引发错误的原因有很多,如下标越界、要访问的文件不存在、类型错误等。如果这些错误得不到正确的处理就会导致程序终止运行。而通过异常处理可以避免此类情况,从而使得程序更加健壮,具有更强的容错性。程序错误一般分为语法错误、运行时错误和逻辑错误3种。2.1错误类型1、语法错误语法错误是指不符合语法规则而产生的错误,如标识符命名错误、不正确的缩进等,这类错误通常在编辑或解释时就会被检测出来,这种错误一旦产生程序将不会被运行。在编辑代码时,Python会对输入的代码直接进行语法检查,如果有语法错误,就会给出相应的语法错误提示信息。>>>print('a')#print前多加了一个空格,缩进错误

SyntaxError:unexpectedindent>>>12a=3#标识符命名错误SyntaxError:invalidsyntax2.1错误类型2、运行时错误有些代码在编写时没有错误,但在程序运行过程中发生错误,这类错误称为运行时错误,例如除数为0、列表索引越界、数据类型不匹配等,出现这类错误,系统会中止程序运行,然后抛出异常。>>>3/0#除数为0Traceback(mostrecentcalllast):File"<pyshell#11>",line1,in<module>3/0ZeroDivisionError:divisionbyzero>>>alist=[1,2,3]>>>alist[4]#列表索引越界Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>alist[4]IndexError:listindexoutofrange2.1错误类型3、逻辑错误逻辑错误又称语义错误,表现形式是程序并不报任何语法错误,也没有异常,但最终程序运行结果与预期结果不一致。例如运算符使用不合理、语句次序不正确、循环语句的初始值和终值设置不正确等。例如求1~100的累加和,代码如下。mysum=0foriinrange(100):mysum+=iprint("1到100的和是:"mysum)【运行结果】1到100的和是:4950上述求1~100的累加和的代码段既没有语法错误,也可以正常运行,但最终得出结果与预期不相符,这就是逻辑错误,这类错误相对于其他两类错误较难以查觉。异常处理主要指的是第2类错误的处理。2.2异常类程序运行时发生的每个异常都对应着一个异常类,Python中的异常类有很多,一些常见异常类:异常类含义AttributeError对象属性错误BaseException所有异常的基类Exception常规错误基类ImportError导入模块/对象失败IndentationError缩进错误IndexError索引错误IOError输入/输出操作失败NameError对象命名错误SyntaxError语法错误TypeError类型无效错误ValueError无效的参数ZeroDivisionError除(或取模)零2.3异常捕获和处理1、try…except…结构格式:try:try代码块except[异常类asex]:except代码块try子句中的代码块包含可能会引发异常的语句,而except子句则用来捕捉相应的异常。如果try子句中的代码引发异常并被except子句捕捉,就执行except子句的代码块;如果try中的代码块没有出现异常就继续往下执行异常处理结构后面的代码;如果出现异常但没有被except捕获,继续往外层抛出,如果所有层都没有捕获并处理该异常,程序崩溃并将该异常呈现给最终用户。except后面可以指定要捕获的异常类,如果没有指定表示捕捉所有的异常。ex表示捕捉到的错误对象(名字可以任意)。2.3异常捕获和处理【例8‑1】try…except…结构使用。求两个数的商,如果除数为0时会引发异常,可通过捕获ZeroDivisionError异常类来处理异常。n1=eval(input('enteranumber:'))n2=eval(input('enteranumber:'))try:result=n1/n2#除数为0时会引发异常exceptZeroDivisionErrorasex:#处理被0除异常print(ex)【运行结果】enteranumber:4enteranumber:0divisionbyzero2.3异常捕获和处理2、try…except…else…结构格式:try:try代码块except[异常类asex]:except代码块else:else代码块功能:如果try中的代码块有异常则执行except代码块,没有抛出异常时则执行else代码块。2.3异常捕获和处理【例8‑2】try…except…else…结构使用。仍以求两个数的商为例说明此结构的使用。如果除数不为0,就输出最终结果。程序代码如下所示:n1=eval(input('enteranumber:'))n2=eval(input('enteranumber:'))try:result=n1/n2exceptZeroDivisionErrorasex:print(ex)else:print('{}/{}={}'.format(n1,n2,result))【运行结果】当除数为0时会抛出异常:enteranumber:4enteranumber:0divisionbyzero如除数不为0则执行else中的语句,输出最终结果。enteranumber:4enteranumber:24/2=2.02.3异常捕获和处理3、try…except…else…finally结构语法格式:try:try代码块except[异常类asex]:except代码块else:else代码块finally:finally代码块首先执行try代码块,如果try代码块有异常,就执行except代码块(发生的异常类型须与except后面指定的异常类型一致);如果没有发生异常,则执行else代码块;最后不论是否有异常,都会执行finally代码块。2.3异常捕获和处理【例8‑3】try…except…else…finally结构使用。将上述求两个数的商的程序改写为如下所示:n1=eval(input('enteranumber:'))n2=eval(input('enteranumber:'))try:result=n1/n2exceptZeroDivisionErrorasex:print(ex)else:print('{}/{}={}'.format(n1,n2,result))finally:print('theend')【运行结果】enteranumber:4enteranumber:24/2=2.0theend再运行一次程序:enteranumber:4enteranumber:0divisionbyzerotheend2.3异常捕获和处理4、捕获多个异常实际开发中,同一段代码可能会抛出多种异常,并且需要针对不同的异常类型进行处理,这时可通过添加相应的except子句来实现,一个except子句捕获一个异常,一旦某个except子句捕捉到了异常,其他的except子句将不会再尝试捕捉异常。该结构有些类似多分支选择结构,语法格式如下:try:try代码块except异常类1[asex1]:except代码块except异常类2[asex2]:except代码块…[else:else代码块][finally:finally代码块]2.3异常捕获和处理【例8‑4】捕获多个异常。仍以求两个数的商为例来说明,用户从键盘输入数据时,如果输入的数据不是数值型数据时,也会引发异常,对此异常也进行相应的处理。代码如下:try:n1=eval(input('enteranumber:'))n2=eval(input('enteranumber:'))result=n1/n2exceptZeroDivisionError:print('除数不能为0')exceptException:print('除数和被除数应为数值型')else:print('{}/{}={}'.format(n1,n2,result))finally:print('theend')【运行结果】第一次运行,输入除数为0时:enteranumber:4enteranumber:0除数不能为0theend第二次运行,输入数据有一个不合法时:enteranumber:3enteranumber:d除数和被除数应为数值型theend3.1成绩异常处理任务实施3.2系统测试Python程序设计3.1

成绩异常处理为学生信息管理模块中成绩输入添加相应的异常处理,保证输入的成绩在0-100之间。在任务6实现的StudentList类中添加一个处理成绩输入的方法,代码如下:def__enterScore(self,message):whileTrue:try:score=input(message)if0<=int(score)<=100:breakelse:print('输入错误,成绩应在0到100之间')except:print('输入错误,成绩应在0到100之间')returnscore3.1

成绩异常处理然后将StudentList类中原来的insert()和update()方法分别做相应的修改,输入各科成绩时利用_enterScore()方法来实现,以保证输入的成绩在0-100之间。修改后的insert()方法代码如下:definsert(self):#添加学生信息whileTrue:no=input('学号:')name=input('姓名:')chinese=self.__enterScore('语文成绩:')math=self.__enterScore('数学成绩:')english=self.__enterScore('英语成绩:')stu=Student(no,name,chinese,math,english)self.stulist.append(stu)choice=input('继续添加(y/n)?').lower()ifchoice=='n':break3.1

成绩异常处理修改后的update()方法代码如下:defupdate(self):#修改学生信息whileTrue:no=input('请输入要修改的学生学号:')forstui

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论