版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
专题十一
异常处理Python程序设计考纲要求一1.熟记程序设计错误的分类2.了解Python中的异常3.了解Python的常规异常4.掌握Python的异常捕捉try…except5.掌握else子句的使用6.掌握finally子句的使用7.了解raise抛出异常知识点梳理-异常的定义二在编写程序时常常会犯错。程序设计错误可以分为3类:语法错误、运行时错误和逻辑错误。如果解释器检测到错误时,会终止程序执行并报告错误类型,这就是异常(Exception)。Python中有很有效的异常处理方法。知识点梳理-Python中的异常二语法错误是由于没有按照程序设计语言的语法规则书写程序而导致的。例如,在Python中编写了空格,在Python3.x中将print()函数误写成print语句等;运行时错误是运行程序时发生的错误,如除数为0,打开一个不存在的文件等;逻辑错误是程序逻辑上发生的错误,如引用了错误的变量,算法不正确等,这类错误编译器和解释器无法直接发现。为了保证程序的健壮性,在写程序时除了要考虑通常情况外还需要考虑可能会发生的异常情况,如程序中有除法,需要考虑除数是0的情况,否则会发生错误。例如:>>>1/0Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>1/0ZeroDivisionError:divisionbyzero知识点梳理-Python中的异常二Python用异常对象(exceptionobject)表示异常情况,遇到错误时如果异常对象没有捕捉或处理时,程序就会用如上述代码所示称为回溯(Traceback,或称为跟踪)的一种错误信息给出提示并终止程序的执行。
Python中每一个异常是类的实例。例如,执行
1/0
后引发的
ZeroDivisionError。再如:>>>y=x+1Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>y=x+1NameError:name'x'isnotdefined由于使用了未定义的变量
x,所以引发了
NameError
异常。Python中内建的异常类很多,与查看内建函数的方法一样,也可以利用
dir()
函数查看异常类:>>>dir(__builtins__)['ArithmeticError','AssertionError','AttributeError',...]知识点梳理-内建异常类二Python中重要的内建异常类和描述见下表。类名描述BaseException所有异常的基类Exception常规异常的基类AttributeError对象不存在此属性IndexError序列中无此索引IOError输入/输出操作失败KeyboardInterrupt用户中断执行(通常输入
Ctrl+C)KeyError映射中不存在此键NameError找不到名字(变量)SyntaxErrorPython语法错误TypeError对类型无效的操作ValueError传入无效的参数ZeroDivisionError除(或取模)运算的第二个参数为0知识点梳理-捕捉异常二try-except语句的一般语法形式为:try:
被检测的语句块
except异常类名:异常处理语句块
代码示例:try:num1=int(input('Enterthefirstnumber:'))num2=int(input('Enterthesecondnumber:'))print(num1+num2)exceptValueError:print('Pleaseinputadigit!')程序的示例输入和执行结果为:Enterthefirstnumber:aPleaseinputadigit!由于int()函数不支持的字符参数"a",从而引发了ValueError异常。可用try-except语句捕捉异常并给出错误处理信息。知识点梳理-捕捉异常二多个except子句和一个except块捕捉多个异常可以用多个except子句来捕捉不同的异常。例如:try:
num1=int(input('Enterthefirstnumber:'))
num2=int(input('Enterthesecondnumber:'))
print(num1/num2)exceptValueError:
print('Pleaseinputadigit!')exceptZeroDivisionError:
print('Thesecondnumbercannotbezero!')知识点梳理-捕捉异常二使用了两个except子句来捕捉两种不同的异常,事实上也可以用一个except子句捕捉多种类型的异常。因此可以改写成如下更简单的形式:try:
num1=int(input('Enterthefirstnumber:'))
num2=int(input('Enterthesecondnumber:'))
print(num1/num2)except(ValueError,ZeroDivisionError):
print('Invalidinput!')知识点梳理-捕捉异常二如果想要捕捉所有的异常,可以使用下面的语法格式:try:
被检测的语句块except异常类名as错误原因名:
异常处理语句块print(错误原因名)这种方式可以将错误原因放到err对象中,并在异常处理块中输出该错误原因。知识点梳理-捕捉异常二try:num1=int(input("输入第一个数字:"))num2=int(input("输入第二个数字:"))print(num1/num2)exceptExceptionaserr:
print("Somethingwentwrong!")print(err)#输出具体错误信息程序的示例输人和执行结果如下:输入第一个数字:aSomethingwentwrong!invalidliteralforint()withbase10:"a"except后使用了“Exception”是常规异常的基类名(并非Python中所有异常),它可以捕获所有的常规异常,不用再写出具体的异常类名这样做既保证了异常捕获的完整性,又非常简单方便。知识点梳理-else子句二一个try-except块可以与if语句或循环语句一样有一条else子句。如果在try块中没有异常引发,则else子句被执行。从逻辑上看else是针对except子句而言的。try:num1=int(input('Enterthefirstnumber:'))num2=int(input('Enterthesecondnumber:'))print(num1/num2)except(ValueError,ZeroDivisionError):print('Invalidinput!')else:print('HelloWorld')如果输入正确没有引发异常,则跳过except块执行else子句中的语句。输入和执行结果如下:Enterthefirstnumber:3Enterthesecondnumber:50.6HelloWorld知识点梳理-else子句二设置一个场景:让用户输入数据,只有正确才能继续执行后面代码,如输入的数据不合法,则继续输入。whileTrue:try:num1=int(input('Enterthefirstnumber:'))num2=int(input('Enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)else:break程序的示例输入和执行结果如下:Enterthefirstnumber:ainvalidliteralforint()withbase10:'a'Enterthefirstnumber:3Enterthesecondnumber:0divisionbyzeroEnterthefirstnumber:3Enterthesecondnumber:50.6知识点梳理-else子句二实际应用中遍历列表时,若索引越界会引发IndexError异常,此时应该有终止遍历的动作,在except子句中添加break语句即可实现此功能。例如:aList=[1,2,3,4,5]i=0whileTrue:try:print(aList[i])exceptIndexError:print('indexerror')breakelse:i+=1知识点梳理-finally子句二finally子句可以用在try语句中,无论是否发生异常,finally子句中的语句块都要被执行。观察下面的程序及其输入和输出结果。try:x=int(input('Enterthefirstnumber:'))y=int(input('Enterthesecondnumber:'))print(x/y)exceptExceptionaserr:print(err)finally:print('Itisafinally.’)正确输入数据时程序运行结果如下:Enterthefirstnumber:3Enterthesecondnumber:50.6Itisafinally.知识点梳理-finally子句二finally子句可以用在try语句中,无论是否发生异常,finally子句中的语句块都要被执行。观察下面的程序及其输入和输出结果。try:x=int(input('Enterthefirstnumber:'))y=int(input('Enterthesecondnumber:'))print(x/y)exceptExceptionaserr:print(err)finally:print('Itisafinally.’)正确输入数据时程序运行结果如下:Enterthefirstnumber:3Enterthesecondnumber:50.6Itisafinally.错误输入数据时程序运行结果如下:Enterthefirstnumber:3Enterthesecondnumber:0divisionbyzeroItisafinally.知识点梳理-raise二正确输入数据时没有发生异常,执行完try中的语句,接着执行finally中的语句;错误输入数据时发生异常,执行except中的语句,接着执行finally子句中的语句。可以看到,finally子句中的语句块不管是否发生异常都会被执行。除了如ZeroDivisionError这样的由Python解释器引发的异常外,还可以利用raise语句主动引发异常。raise语句的一般语法形式为:raise[异常名]异常名可以是一个异常类或异常类的实例。例如:知识点梳理-raise二看一个具体的例子:deffoo(score):ifscore<60:raiseException("Invalidinput!",score)else:print("That'sgreat.")foo(58)因为输入的函数参数为58,因此满足if条件,会引发异常导致程序停止,如果输入的参数大于或等于60,则不会引发异常,输出字符串“That'sgreat.”。执行程序后的输出结果为:Traceback(mostrecentcalllast):File"C:/Python/programs/exception.py",line7,in<module>foo(58)File"C:/Python/programs/exception.py",line3,infooraiseException("Invalidinput!",score)Exception:('Invalidinput!',58)知识点梳理-总结二异常。Python中用异常对象表示异常情况。每一个异常是异常类的实例。Python中内建的异常类很多,其中BaseException是所有异常的基类,Exception是常规异常类。try-except语句。将被检测的和异常处理语句序列分别放入try和except中,如果被检测的语句序列中有异常,则执行异常处理语句序列;否则,忽略except后的语句。一个try语句中可以有多个except子句,也可以用一个except块捕捉多个异常。try-except-else语句。如果try中没有异常,那么except子句将被跳过,执行else中的语句。try-finally语句。finally中的语句无论是否有异常最后都要执行。raise语句。除由Python解释器引发的异常外,还可以利用raise语句由程序主动引发异常,可以是系统产生的或由用户自定义的异常名。限时练习三1.下列哪种错误类型会在代码运行时引发ZeroDivisionError异常()。
A.语法错误
B.运行时错误
C.逻辑错误
D.编译错误
【答案】B
【解析】ZeroDivisionError属于运行时错误,因程序运行时除数为零引发,语法错误在代码解析阶段就会被发现(如缺少冒号),而逻辑错误是程序逻辑问题(如算法错误)。限时练习三2.Python中所有异常的基类是()。
A.
Exception
B.
BaseException
C.
SyntaxError
D.
RuntimeError
【答案】B
【解析】BaseException是所有异常的基类,而Exception是其子类,用于常规异常。限时练习三3.下面代码的输出结果可能是什么()。try:print(10/0)exceptValueError:print("ValueError")exceptZeroDivisionError:print("ZeroDivisionError")A.ValueError
B.ZeroDivisionError
C.无输出
D.程序报错
【答案】B
【解析】10/0会引发ZeroD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全年设计外包合同
- 公路测量外包合同
- 到期终止外包合同
- 动漫设计外包合同
- 化工产品外包合同
- 医院消毒外包合同
- 厂里食堂外包合同
- 叮咚第三方外包合同
- 商标设计外包合同
- 园艺外包合同
- 招聘 成都新都投资集团有限公司2026年招聘工会统战岗等岗位(65人)考试备考试题及答案解析
- 企业品牌危机公关方案指引
- 2025江苏省苏州市中考英语真题(原卷版)
- 2026年《生态环境法典》学习解读课件
- 2025年江苏省粮食集团所属企业夏季招聘20人笔试历年参考题库附带答案详解
- 2026年枣庄银行校园招聘(20人)考试备考题库及答案解析
- 2026桂林市教师招聘笔试题及答案
- 小学英语三年级下册(闽教版)《Unit 2 My Clothes Lesson 3 Where is my Sweater》核心素养导向教学设计
- 山东临淄区九合财金控股有限公司招聘笔试题库2026
- 机械加工工艺流程标准作业指导书
- 中国中化2026届人才测评题库
评论
0/150
提交评论