版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章错误和异常《Python程序开发案例教程(第2版))》学习目标/Target了解错误和异常,能够说出什么是错误和异常熟悉异常的类型,能够理解常见异常类的含义掌握try-except语句的使用,能够在程序中通过try-except语句捕获与处理异常掌握try-except-else语句的使用,能够通过try-except-else语句捕获异常,并在else子句中添加没有异常的处理代码掌握try-except-finally语句的使用,能够通过try-except-finally语句捕获异常,并在finally子句中添加释放资源的代码学习目标/Target掌握raise语句的使用,能够在程序中通过raise语句抛出异常了解异常的传递,能够说出异常传递的特点掌握assert断言语句的使用,能够在程序中通过assert语句抛出异常掌握自定义异常的方法,能够在程序中自定义并处理异常熟悉with语句与上下文管理器,能够在程序中使用with语句释放资源章节概述/Summary在现实生活中,我们经常会遇到各种突发情况,比如航班延误、火车晚点、交通堵塞等。而在程序中同样不可避免地会出现异常,比如试图打开一个不存在的文件、访问未定义的变量等,这些异常默认情况下都会导致程序崩溃而无法正常执行。为了增强程序的稳定性,Python提供了强大的异常处理机制,它不仅可以捕获以及处理异常,防止程序崩溃,还提供详细的诊断信息,帮助开发人员快速定位和解决问题。接下来,本章将针对错误和异常的内容进行讲解。目录/Contents010203错误和异常概述捕获与处理异常抛出异常目录/Contents040506自定义异常with语句实例:身份归属地查询错误和异常概述10.1
先定一个小目标!了解错误和异常,能够说出什么是错误和异常10.1.1认识错误和异常1.语法错误10.1.1认识错误和异常语法错误又称解析错误,是指违反了Python语法规则的代码所引起的错误,通常是由开发人员在编写代码时造成的。语法错误在被解释器执行之前就能由代码编辑器检测出来,需要开发人员修复以保证代码的正确性。2.逻辑错误10.1.1认识错误和异常逻辑错误是指代码在语法上是正确的,但逻辑上存在问题,导致程序无法按照预期的方式执行。逻辑错误可能由错误的算法、错误的条件判断或错误的数据处理等引起。whileTrueprint("语法格式错误")解析错误示例循环条件的后面缺少冒号radius=5area=2*3.14*radius#错误的公式print("圆的面积:",area)异常示例2πr是计算圆的周长,不是计算圆的面积10.1.1认识错误和异常示例演示3.异常10.1.1认识错误和异常异常是在程序运行时期间发生的错误,可能是由于外部环境、不正确的输入、无效的操作或其他因素引起的。与错误不同,异常通常是由解释器在程序执行期间检测到的,并在处理异常的机制下进行处理。注意,如果异常没有被程序进行处理,程序默认的处理方式是直接终止运行并给出错误信息。File"D:\ProgramDev2\Chapter10\test.py",line1whileTrue^SyntaxError:expected':'示例
先定一个小目标!熟悉异常的类型,能够理解常见异常类的含义10.1.2异常的类型Python中所有的异常均由类实现,所有的异常类又继承自BaseException类,程序运行时出现的异常大多继承自Exception类。异常的类型10.1.2异常的类型解释器退出异常中断执行时产生的异常内置异常的基类生成器退出异常Exception类派生了很多子类,每个子类都是开发中经常遇到的异常。Exception的常见子类及其描述如表所示。异常的类型10.1.2异常的类型类名描述SyntaxError当程序中有语法错误时引发的异常FileNotFoundError当程序未找到指定文件或目录时引发的异常NameError当程序找不到指定名称的变量时引发的异常ZeroDivisionError当程序中使用的除数为0时引发的异常IndexError当程序中使用了超出序列范围的索引时引发的异常KeyError当程序中使用不存在的键访问字典时引发的异常AttributeError当程序尝试访问对象的未知属性时引发的异常TypeError当程序在使用某类型的场合使用其他类型时引发的异常捕获与处理异常10.2
先定一个小目标!掌握try-except语句的使用,能够在程序中通过try-except语句捕获与处理异常10.2.1try-except语句try-except语句10.2.1try-except语句try:
可能出错的代码except[异常类[as异常信息]]:
捕获异常后的处理代码语法格式执行过程执行try子句中可能出错的代码若try子句中没有产生异常,跳过except子句的代码若产生异常,跳过try子句中出错行及之后的代码,执行except子句的代码321txt_file.txt文件的内容try-except语句10.2.1try-except语句(1)捕获单个异常当使用try-except语句捕获异常时,如果except后面指定一个异常类,那么此时程序只会捕获与异常类对应的单个异常。try:foriin2:print(i)exceptTypeError:
#except后面指定一个异常类print("出错了")txt_file.txt文件的内容try-except语句10.2.1try-except语句(2)捕获多个异常一段代码运行后可能会产生多个异常。当使用try-except语句捕获异常时,如果except后面指定包含多个异常类的元组,那么此时程序会捕获与异常类对应的多个异常。try:print(count)demo_list=["Python","Java","C","C++"]print(demo_list[5])except(NameError,IndexError):#except后面指定多个异常类print("出错了")txt_file.txt文件的内容try-except语句10.2.1try-except语句(2)捕获多个异常使用多个except子句捕获多个异常,每个except子句指定一个异常类。将上述代码修改为多个except子句。try:print(count)demo_list=["Python","Java","C","C++"]print(demo_list[5])exceptNameError:#except后面指定一个异常类print("出错了")exceptIndexError:#except后面指定另一个异常类print("出错了")txt_file.txt文件的内容try-except语句10.2.1try-except语句(3)捕获所有异常Python中捕获所有异常有两种方式,一种方式是在except子句中指定异常类为Exception,因为Exception是所有常见异常的父类,所以Exception及其子类对应的异常都能够被捕获。try:print(count)demo_list=["Python","Java","C","C++"]print(demo_list[5])exceptException:#except后面指定异常类为Exceptionprint("出错了")txt_file.txt文件的内容try-except语句10.2.1try-except语句(3)捕获所有异常只使用except子句,并在该子句的except后面省略具体的异常类,此时程序也会捕获所有的异常,示例代码如下。try:print(count)demo_list=["Python","Java","C","C++"]print(demo_list[5])except:#except后面省略异常类print("出错了")异常处理的主要目的是防止因外部环境的变化导致程序产生无法控制的异常,而不是解决程序本身的设计问题。因此,将所有的代码都放到try子句的做法是不推荐的,try子句应该尽量只包含可能产生异常的代码。
先定一个小目标!掌握捕获异常信息,能够在程序中捕获异常信息10.2.2捕获异常信息txt_file.txt文件的内容捕获异常信息当使用try-except语句捕获异常时,可以使用关键字as获取异常的具体信息。例如,在捕获多个异常的示例中,使用关键字as获取异常的具体信息,具体代码如下。try:print(count)demo_list=["Python","Java","C","C++"]print(demo_list[5])except(NameError,IndexError)aserror:#使用关键字as获取异常信息print("出错了,原因是",error)10.2.2捕获异常信息
先定一个小目标!掌握try-except-else语句的使用,能够通过try-except-else语句捕获异常,并在else子句中添加没有异常的处理代码10.2.3else子句Python中try-except语句还可以与else子句联合使用,组成结构更加复杂的try-except-else语句。当程序执行try-except-else语句时,若try子句的代码没有产生任何异常,则会执行else子句的代码。try-except-else语句的语法格式如下:10.2.3else子句try:
可能产生异常的代码except[异常类[as异常信息]]:
捕获异常后的处理代码else:
没有异常的处理代码语法格式num=input("请输入每页显示多少条数据:")try:page_size=int(num)exceptException:page_size=20print(f"当前页显示{page_size}条数据")else:print(f"当前页显示{page_size}条数据")
先定一个小目标!掌握try-except-finally语句的使用,能够通过try-except-finally语句捕获异常,并在finally子句中添加释放资源的代码10.2.4finally子句Python中try-except语句还可以与finally子句联合使用,组成结构更加复杂的try-except-finally语句。当程序执行try-except-finally语句时,若try子句的代码没有产生任何异常,都会执行finally子句的代码。try-except-finally语句的语法格式如下:try:
可能产生异常的代码except[异常类[as异常信息]]:
捕获异常后的处理代码finally:
无论是否产生异常都会执行的代码语法格式file=open('异常.txt','r')try:file.write("人生苦短,我用Python")exceptExceptionaserror:print("写入文件失败",error)finally:file.close()print('文件已关闭')10.2.4finally子句抛出异常10.3
先定一个小目标!掌握raise语句的使用,能够在程序中通过raise语句抛出异常10.3.1raise语句raise语句10.3.1raise语句Python程序中的异常不仅可以自动触发,还可以由开发人员使用raise语句主动引发异常。raise异常类#格式1:使用异常类名引发指定的异常raise异常类对象 #格式2:使用异常类的对象引发指定的异常raise #格式3:使用刚出现过的异常重新引发异常语法格式第1种格式和第2种格式是对等的,都会引发指定类型的异常,其中第1种格式会隐式创建一个该异常类型的对象,第2种形式是最常见的,它会直接提供一个该异常类型的对象。第3种用于重新引发上下文中捕获的异常,或默认引发RuntimeError异常。10.3.1raise语句raise语句(1)使用异常类引发异常raiseIndexError(2)使用异常的对象引发异常raiseIndexError()raiseIndexError('索引下标超出范围') #引发异常及其具体信息隐式地创建IndexError类的实例显式地创建IndexError类的实例10.3.1raise语句raise语句(3)重新引发异常try:raiseIndexError('索引下标超出范围')except:raise再次引发刚刚发生的IndexError异常
先定一个小目标!了解异常的传递,能够说出异常传递的特点10.3.2异常的传递当Python程序中产生了异常,如果当前的代码块没有处理该异常,则会将该异常传递给调用它的上一级代码块。如果上一级代码块仍然没有处理该异常,则会将该异常继续向上传递,直至该异常被捕获并处理,或者程序最终崩溃。10.3.2异常的传递
先定一个小目标!掌握assert断言语句的使用,能够在程序中通过assert语句抛出异常10.3.3assert断言语句10.3.3assert断言语句assert断言语句用于判定一个表达式是否为真,如果表达式的值为True,不做任何操作,否则引发AssertionError异常。assert表达式[,异常信息]语法格式表达式后面的异常信息是可选项,它通常会通过字符串的形式说明引发异常的原因。10.3.3assert断言语句age=17assertage>=18,"年龄必须大于等于18岁"示例如果保证代码能够正确执行,那么可以不用在程序中使用assert断言语句。例如,一个会员管理系统,要求人的年龄必须大于18岁,则可以对年龄进行断言,如下所示。自定义异常10.4
先定一个小目标!掌握自定义异常的方法,能够在程序中自定义并处理异常10.4自定义异常自定义异常10.4自定义异常Python中定义了大量的异常类,虽然这些异常类可以描述编程时出现的绝大部分错误情况,但仍难以涵盖所有可能出现的异常。Python允许开发人员自定义异常。自定义异常自定义异常的方式比较简单,我们只需要定义一个表示异常的类,让它继承Exception类或其它异常类即可。自定义异常类与普通类一样,也可以具有自己的属性和方法,但一般情况下不添加或者只为其添加几个用于描述异常的详细信息的属性即可。classCustomError(Exception):pass#pass表示空语句自定义异常try:raiseCustomError("出现错误")exceptCustomErroraserror:print(error)使用自定义异常10.4自定义异常10.4自定义异常自定义异常txt_file.txt文件的内容classFileTypeError(Exception):def__init__(self):self.err='仅支持jpg/png/bmp格式'super().__init__(self.err)示例file_name=input("请输入上传图片的名称
(包含格式):")try:iffile_name.split(".")[1]in["jpg","png","bmp"]:print("上传成功")else:
raiseFileTypeErrorexceptExceptionaserror:print(error)with语句10.5
先定一个小目标!10.5with语句熟悉with语句与上下文管理器,能够在程序中使用with语句释放资源with语句在使用try-except-finally捕获异常时,finally子句中的代码必定会执行,但这种方式过于繁琐,在某些情况下还可以使用with语句替代try-except-finally语句。with语句支持创建资源、抛出异常、释放资源等操作,并且可以简化代码。with语句适用于对资源进行访问的场合,无论资源在使用过程中是否发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《医疗行业简介》课件
- 《就英法联军远征中国致巴特勒上尉的信》第二课时人教版九年级语文上册课件
- 2015年重庆市B卷中考满分作文《我们携手走进青春》
- 《人才知识大全》课件
- 《房地产物业管理》课件
- 安全培训资料:20个固废-危废的常见违法行为
- 电力设施维护设备租赁合同协议
- 免租金书店租赁合同
- 医疗服务质量提升与客户关系
- 风力发电场护坡施工合同范本
- 厦门租房合同范本
- 外研版英语2024七年级上册全册单元知识清单(默写版)
- 2024中国华电集团限公司校园招聘高频500题难、易错点模拟试题附带答案详解
- 降低产后乳房胀痛发生率
- 2024年高考英语一模试题分类汇编:阅读六选四(上海专用)(解析版)
- 双评价技术指南(征求意见稿)20190326
- 国家国籍英文对照
- 医疗设备安装管理制度
- 学校意识形态工作责任书
- 2024年部编版新教材语文小学一年级上册第二单元复习课教案及单元复习题(有答案)
- 五年级上册小数乘除竖式计算题200道及答案
评论
0/150
提交评论