版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
异常处理通识课-《人工智能通识》概述1异常(Exception)是指程序中的例外、不正常情况。Python使用异常对象来表示异常状态,并在程序运行过程中遇到错误时引发异常。异常对象未被处理(或捕获)时,程序将终止并显示一条错误消息(traceback)。程序停止执行并且提示错误信息这个动作,通常称之为抛出(raise)异常。11.8异常处理2每个异常都是某个类的实例。在Python3中,BaseException是所有异常类的基类,所有的内置异常都是它的派生类。有很多内置的异常类,表11-16描述了最重要的几个。11.8异常处理311.8异常处理4在Python当中,若一个程序在运行的时候出错,Python解释器会自动在出错的地方生成一个异常对象,而后Python解释器会自动在出错地方的附近寻找有没有对这个异常对象处理的代码,所谓异常处理代码就是try…except语句,如果没有,Python解释器会自动将这个异常对象抛给其调用函数,就这样层层抛出,如果在main当中也没有对这个异常对象处理的代码,Python解释器(实际上是操作系统)最后会将整个程序给终止掉,并将错误信息在显示屏上输出。11.8异常处理5
Python中使用try...except语句捕获异常。try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常。例:除法运算时除数为0,会引起一个ZeroDivisionErrortotal=92 异常信息如下所示:number=0 ZeroDivisionError:divisionbyzeroprice=total/numberprint("theend")11.8异常处理6程序因为ZeroDivisionError而中断了,语句print("theend")没有运行。为了处理异常,使用try...except更改代码total=92number=0 运行结果如下:try: 除数number不能为0!price=total/number theendexceptZeroDivisionError:print("除数number不能为0!")print("theend")11.8异常处理7这样程序就不会因为异常而中断,从而print("theend")语句正常执行。把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的多个异常,如果except后没有指定异常类型,则默认处理所有的异常。11.8异常处理8except语句中同时处理多个异常示例代码:total=[92,29] 运行结果:number=0 除数number不能为0或者列表索引越界!try: theend#列表索引越界,最大值为1price=total[3]/number#同时捕捉ZeroDivisionError和IndexError异常except(ZeroDivisionError,IndexError):print("除数number不能为0或者列表索引越界!")print("theend")11.8异常处理9
在try...except语句后面可以添加finally子句,无论异常是否发生,finally子句都会被执行。所以,finally子句一般用于关闭因异常而不能释放的系统资源。finally语句示例代码:try:f=open("demofile.txt","r")f.write("Addsomenewcontent")except:print("Somethingwentwrongwhenwritingtothefile")finally:11.8异常处理10f.close()
print(f.read())运行结果如下:SomethingwentwrongwhenwritingtothefileValueError:I/Ooperationonclosedfile.11.8异常处理11虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。同时在finally语句中释放了打开的文件对象资源,重新调用文件对象的read()方法时报了错误。
当程序出现错误时,Python会自动引发异常;也可以通过raise显式地引发异常,和C#、Java中的throw关键字类似。一旦执行了raise语句,raise后面的语句将不能执行。raise语句的用法代码示例:11.8异常处理12try:s=NoneifsisNone: 运行结果如下:
print("s是空对象") s是空对象#抛出异常,类型NameError 空对象没有长度raiseNameErrorprint(len(s))exceptNameError:print("空对象没有长度")11.8异常处理13如果去掉或者注释掉第5行代码,因None对象不能使用函数len()调用,程序执行到第6行代码时将引发TypeError异常。try:s=NoneifsisNone: print("s是空对象") 运行结果如下:
#raiseNameError s是空对象print(len(s)) TypeError:objectoftype'NoneType'hasnolen()exceptNameError:print("空对象没有长度")11.8异常处理*14在Python中,用户可以自定义异常,用于更好地描述特定的错误或异常情况。通过创建自定义异常,可以为你的应用程序或库提供更具体和有意义的错误消息,从而提高代码的可读性和可维护性。#创建自定义异常类classCustomError(Exception):def__init__(self,message="发生了自定义异常"):self.message=messagesuper().__init__(self.message)11.8异常处理*15#使用自定义异常defdivide(x,y):ify==0:raiseCustomError("除数不能为零")returnx/y#捕获自定义异常try:result=divide(10,0)exceptCustomErrorasce:print(f"捕获自定义异常:{ce}")11.8异常处理*16在上面的例子中,我们首先定义了一个名为CustomError的自定义异常类,它继承自内置的Exception类。在这个类中,我们使用了构造函数__init__来初始化异常对象,并通过super().__init__(self.message)调用父类的构造函数。然后,我们定义了一个函数divide,该函数用于执行除法操作。在函数内部,如果除数y为零,我们抛出了自定义异常CustomError,并传递了错误消息"除数不能为零"。11.8异常处理*17最后,在try-except块中,我们调用divide函数,并捕获了可能抛出的自定义异常。如果发生自定义异常,我们就可以通过异常对象访问到自定义的错误消息,从而更好地理解发生了什么错误。练习18一、单选题1.关于异常处理,以下选项中描述错误的是()?A.Python通过try、except等保留字提供异常处理功能B.程序异常发生经过妥善处理可以继续执行C.异常语句可以与finally保留字配合使用D.编程语言中异常和错误是完全相同的概念练习192.Python中用来抛出异常的关键字是()?A.tryB.exceptC.raiseD.finally3.()类是所有异常类的父类?A.ThrowableB.ErrorC.ExceptionD.BseException练习20二、填空题1.Python异常的保留字包括_____、_____、_____、_____等。2.Python常见的异常错误有_____、_____、_____、_____、_____等。3.列表越界的异常是_____。练习21三、综合题1.列举4种常见的异常。2.简单说明Python异常处理结构try…except…finally…各个部分的基本作用3.编写程序,定义一个长度为3的列表,用列表第一个数字除以第二个数字,得到的结果与第三个数字相加。使用异常检查下面的错误:ValueError、ZeroDivisionError,并给出响应的提示。11.9综合实践22综合实践为垃圾分类项目,学生通过收集和查阅垃圾分类相关资料和资讯,了解垃圾的正确分类方式和垃圾分类的目的。垃圾分类分析可以让学生了解垃圾的正确分类和相应处理的方法,从而增强他们的环保意识,增强学生参与到垃圾分类和环境保护工作的积极性和主动性,培养学生的社会责任感和公民意识。垃圾分类项目是一项综合性的任务,不仅牵涉到垃圾分类相关知识还需要运用Python编程知识去综合分析和设计,需要学生运用多种知识和技能进行分析和处理,培养学生综合实践和创新思维能力。项目概述23创建一个简单的垃圾分类应用程序,根据输入的垃圾名称,输出对应的垃圾类别。使用文件来存储垃圾分类数据,并在程序中对其进行读取和处理。准备数据:创建一个文本文“garbage_classification_data.txt”,存储垃圾分类相关数据,包括名称、分类、材料和是否可降解,格式如下:knife,Recyclable,metal,nobulb,hazardous,glass,no……项目概述242.实现功能:利用Python基础知识、流程控制语句、list、dict、文件读写和异常处理等内容编写程序以实现以下功能:(1)用函数实现读取文件中的垃圾分类数据并存储到字典中。使用try…except异常处理确保文件存在,如不存在捕捉FileNotFoundError异常,并给出相应的错误提示。(2)提示用户输入垃圾名称,当用户输入“q”或者“quit”时退出程序。对输入的垃圾名称进行字符串处理(去除空格和转换为小写)。(3)使用流程控制语句检查用户输入垃圾名称是否在字典中。如果项目概述25垃圾名称在字典中,则输出其相应信息:垃圾名称、类别、材料和是否可降解;否则,提示用户输入的垃圾名称无法识别,并要求用户输入垃圾的分类、材料和是否可降解,添加到垃圾分类数据字典中。最后,用函数实现保存该条信息到垃圾分类数据文件garbage_classification_data.txt中,给出保存成功提示信息。相关知识点261.Python基础语法:程序开发设计过程中需要用不同数据类型的变量保存各种信息。用户通过输入函数input()输入的垃圾名称,同时需要对用户输入的字符串用strip()方法去除两端空格和lower()方法转化为小写字母再进行比较等特殊处理,最后还要通过输出函数print()打印出垃圾具体分类信息。2.文件读写:系统需要利用文件对象的open()方法打开垃圾分类数据文件,并利用文件对象的read()、readline()、readlines()等方法读取文件的内容。如用户输入的垃圾名称不在文件中,还需要使用write()相关知识点27方法写入到垃圾分类文件中,最后记得用close()方法关闭文件对象等。3.基本数据类型:系统读入垃圾分类数据文件内容构建字典数据类型,以垃圾名称为key值,通过append()方法添加数据、remove()方法删
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026年项目合同管理专项训练题库
- 2025-2026年电子商务师考试电子商务安全与隐私保护模拟试题
- 2025-2026年物业管理从业人员物业管理信息化系统应用与维护模拟试卷
- 化工厂危化品使用制度
- 九年级下册英语外研版同步练习module 1 travel达标测试卷(含答案 )
- 医院针灸推拿科2026年工作总结及下一步计划
- 2026初中物理教资面试教资面试结构化真题题库
- 智能生产线优化分析方案
- T-CPARK 60-2024 防爆抓斗桥式起重机
- T-HBSF 005-2025 薰衣草露地栽培技术规程
- 透析患者怎么分层次管理?荣科血液净化智能管理系统用标签实现精准分级
- Unit 4 Healthy habits (Period 1)(课件)-2026-2027学年人教PEP版英语五年级上册
- 2026年新疆招录辅警考试题库(含答案)
- 2026年秋季七年级数学上册教学计划(北师大版)
- IMPA船舶物料指南(电子版)
- 软件技术专业介绍
- JBT 7041.3-2023 液压泵 第3部分:轴向柱塞泵 (正式版)
- 2023年广东广州南沙区万顷沙镇招聘编外人员23人笔试模拟试题及答案解析
- 语音信号处理基础课件
- GB/T 9800-1988电镀锌和电镀镉层的铬酸盐转化膜
- GB/T 4604-2006滚动轴承径向游隙
评论
0/150
提交评论