版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
异常处理10.1异常处理概述其一其二其三引入异常处理机制后,使得异常处理代码和正常执行的程序代码分开,增加了程序的清晰性、可读性,明晰了程序的流程。可以对产生的各种异常事件进行分类管理,也可以对多个异进行统一处理,具有相当的灵活性。发生异常后,可以从try……except之间的代码段中快速定位异常出现的位置,提高异常处理的效率。异常(Exception)就是程序在运行过程中发生的,由于硬件故障、软件设计错误、运行环境不满足等原因导致的程序错误。比如网络中断、文件找不到等。代码运行时如果发生了异常,将生成代表该异常的一个对象,并交由Python解释器寻找相应的代码来处理这一异常。异常的概念10.1.1异常处理10.1异常处理概述异常示例10.1.2异常处理10.1异常处理概述Python的异常类10.1.3Python中所有的异常类都是Exception的子类。Exception类定义在exception模块中,该模块是Python的内置模块,用户可以直接使用。1.NameError
尝试访问一个未声明的变量,会引发NameError异常。2.ZeroDivisionError
当除数为零的时候,会引发ZeroDivisionError异常。3.IndexError
当引用序列中不存在的索引时,会引引发IndexError异常。4.KeyError
当使用映射中不存在的键时,会引发Keyerror异常。5.AttributeError
当尝试访问未知的对象属性时,会引发AttributeError异常。6.SyntaxError
当解释器发现语法错误时,会引发SyntaxError异常。7.FileNotFoundError
试图打开不存在的文件时,会引发FileNotFoundError异常。异常处理10.2异常处理机制抛出异常捕获异常程序执行过程中如出现异常,会自动生成一个异常对象,该异常对象被提交给Python解释器,该过程为抛出异常。抛出异常也可以由用户程序自行定义。当Python解释器接收到异常对象时,会寻找处理这一异常的代码并处理。系统终止如果Python解释器找不到可以处理异常的方法,则运行时系统终止,应用程序退出。异常处理10.2异常处理机制try:
语句块exceptExceptionName1:
异常处理代码1exceptExceptionName2:
异常处理代码2……(1)try语句
指定捕获异常的范围,由try限定的代码块中的语句在执行过程中,可能会生成异常对象并抛出。(2)except语句
每个try代码块必须有一个或多个except语句,用于处理try代码块中所生成的异常。except语句后的参数指明能够捕获的异常类型。except块中包含的是异常处理的代码。try…except语句10.2.1try:x=int(input("请输入数据:"))print(100/x)exceptZeroDivisionError:print("异常信息:除数不能为0")exceptValueError:print("异常信息:输入数据必须是拉伯数字")异常处理10.2异常处理机制try:
语句块exceptExceptionName:
异常处理代码……
#except可以有多条语句else:
无异常发生时的语句块finally:
必须处理的语句块1.else语句当try语句没有捕获到任何异常信息,将不执行except语句块,而是执行else语句块。2.finally语句
为异常处理提供一个统一的出口,使得在控制流转到程序的其他部分以前,能够对程序的状态作统一的管理。finally块中的语句一定会被执行。else和finally语句10.2.2fname="ex1005.py"try:file=open(fname,"r",encoding="utf-8")forlineinfile:print(line,end="")exceptFileNotFoundError:print("您要读取的文件不存在,请确认")else:print("文件读取正常结束")finally:print("文件正常关闭")iffile!=None:file.close()异常处理10.2异常处理机制捕获所有异常10.2.3如果用户编写程序质量低,一个程序中可能存在多处错误,逐一捕捉这些异常会非常繁琐,而且也没有必要。为了解决程序中会可能存在多处错误情况,可以在except语句中不指明异常型,这样它就可以处理任何类型的异常。numbers=[0,0,0]try:numbers[0]=int(input("请输入第1个数:"))numbers[1]=int(input("请输入第2个数:"))print(numbers[0]/numbers[1])except:print("程序出现异常")numbers=[0,0,0]try:numbers[0]=int(input("请输入第1个数:"))numbers[1]=int(input("请输入第2个数:"))print(numbers[0]/numbers[1])exceptExceptionasresult:print("程序出现异常:",result)异常处理10.3抛出异常raise异常类
#抛出异常,并隐式地创建类对象raise异常类对象
#抛出异常,创建异常类的实例对象>>>raiseNameErrorTraceback(mostrecentcalllast):File"<pyshell#15>",line1,in<module>raiseNameErrorNameError>>>nerror=NameError()>>>raisenerror当使用raise语句抛出异常时,还可以给异常类指定描述信息。>>>raiseIndexError("索引超出范围")raise语句10.3.1异常处理10.3抛出异常抛出异常示例10.3.2程序中也可以抛出异常,但需要生成异常对象。生成异常对象一般都是通过raise语句实现的。模拟现金支付功能,当支付额度大于5000时,抛出ValueError异常;当额度低于5000时,按照额度的10%扣税。defpayOut(amount):if(amount>5000):raiseValueError("Theamountoutofbounds!")else:returnamount-amount*0.1if__name__=='__main__':pay=payOut(4000)print("实际支出金额是:",pay)pay=payOut(5200)print("实际支出金额是:",pay)异常处理10.4断言与上下文管理assert语句又称作断言语句,指的是用户期望满足指定的条件。当用户定义的约束条件不满足的时候,它会触发AssertionError异常,所以assert语句可以当作条件式的raise语句。assert逻辑表达式,description断言10.4.1try:x=int(input("请输入第1个数:"))y=int(input("请输入第2个数:"))assertx>2andy>2,"x和y必须为大于2的正整数"ifx>y:x,y=y,xnum=[]i=xforiinrange(x,y+1):forjinrange(2,i):ifi%j==0:breakelse:num.append(i)print("{}和{}之间的质数为{}".format(x,y,num))exceptExceptionasresult:print("异常信息:",result)异常处理10.4断言与上下文管理上下文管理10.4.2使用上下文管理语句with可以自动管理资源,代码块执行完后,自动还原进入该代码块之前的现场或上下文。不论何种原因跳出with块,也不论是否发生异常,总能保证资源被正确释放,简化工作。多用于打开文件、连接网络、连接数据库等场合。with表达式[asvariable]:with语句块fname="e:\\python312\\test.txt"with
open(fname)
as
file:
for
line
in
file:
print(line,end="")异常处理10.5自定义异常应用场景
某个应用所特有的运行错误,需要编程人员根据程序的逻辑在用户程序中创建用户自定义的异常类和异常对象。
用户自定义异常主要用来处理程序中可能产生的逻辑错误,使得这种错误能够被系统及时识别并处理,而不致扩散产生更大的影响,从而使用户程序更为强健,有更好的容错性能,并使整个系统更加安全稳定。创建用户自定义异常需要完成的工作(1)声明一个新的异常类,使之以Exception类或其他某个已经存在的系统异常类或用户异常类为父类。(2)为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现该类所对应的错误信息。例10-10异常处理10.6利用AI工具辅助分析程序中的错误编写和运行程序时经常会遇到出错的情况,处理程序中的错误需要一定的知识储备和经验,我们可以将存在错误的程序代码或Python解释器报告的异常信息输入AI工具,让AI工具分析原因或给出解决方法,供我们参考。利用DeepSeekAI工具,分析生成词云图代码中的错误。USER:下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 螺旋桨钳工操作水平能力考核试卷含答案
- 搪瓷烧成工成果能力考核试卷含答案
- 木材干馏工竞争分析评优考核试卷含答案
- 供热管网系统运行工岗中强化考核试卷含答案
- 乙烯装置操作工技术管理测试考核试卷含答案
- 护林员岗前指挥能力考核试卷含答案
- 变压器处理工创新实践能力考核试卷含答案
- 玻纤织布带工安全生产意识知识考核试卷含答案
- 初中生物测试题及答案
- 自考教育学试题及答案
- 湖南炎德英才名校联考2027届高三上学期开学考试英语+答案
- 2026年重庆市建设工程监理人员考试(监理工程师)练习题及答案
- 2026年滨州市新闻传媒中心公开招聘事业单位人员控制总量备案管理工作人员考试备考试题及答案详解
- 2026年秋部编版小学语文二年级上册教学工作计划
- 2026年秋季高三提前开学第一课 高考数学提分秘籍
- 2026中国睡眠健康研究白皮书(官方完整版中国睡眠研究会×华为运动健康)
- 监理巡视、旁站、平行检验制度
- 2026年安全月员工安全知识手册
- 2025年上半年教师资格证考试小学科目一综合素质真题和答案解析
- 近视防控的科学方法专题讲座
- ICU患者气管插管应急预案演练脚本
评论
0/150
提交评论