Python基础教程 课件 项目十 Python异常处理_第1页
Python基础教程 课件 项目十 Python异常处理_第2页
Python基础教程 课件 项目十 Python异常处理_第3页
Python基础教程 课件 项目十 Python异常处理_第4页
Python基础教程 课件 项目十 Python异常处理_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

项目十Python异常处理任务10.2任务10.3CONTENTS目录异常处理抛出异常任务10.4任务10.1Python语言中的异常自定义异常任务10.1Python语言中的异常程序在执行过程中,由于本身编写问题或外界环境改变而引发的错误称为异常。引发异常的原因有很多,如下标越界、文件不存在、网络异常、数据类型错误等。示例代码如下:10.1.1异常的概念>>>5+"3"Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>5+"3"TypeError:unsupportedoperandtype(s)for+:′int′and′str′>>>10/0Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>10/0ZeroDivisionError:divisionbyzero当尝试访问未知的对象属性时,会引发AttributeError(尝试访问未知的对象属性)异常。示例代码如下:10.1.2常见的异常classAnimal():name=′tiger′animal=Animal()print(animal.name)print(animal.color)1.AttributeError异常Animal类没有定义color属性,在创建Animal类的实例后,访问它的color属性时,会出现AttributeError异常,如图10-1所示。10.1.2常见的异常1.AttributeError异常图10-1

AttributeError异常当尝试以只读方式打开一个不存在的文件时,会引发FileNotFoundError(找不到文件,Python3.2以前是IOError)异常。示例代码如下:10.1.2常见的异常file=open(′111.txt′)2.FileNotFoundError异常在本示例中,使用open()函数打开名为“111.txt”的文件,当该文件不存在时,会出现FileNotFoundError异常,如图10-2所示。图10-2

FileNotFoundError异常Python解释器是通过代码块的缩进来判断代码之间的逻辑关系的。当缩进错误时,会引发IndentationError(缩进错误)异常。示例代码如下:10.1.2常见的异常list_1=[1,2,3,4]foriinlist_1:print(i)3.IndentationError异常由于for循环语句块没有缩进,因此导致程序出现IndentationError异常,如图10-3所示。图10-3

IndentationError异常当使用序列中不存在的索引时,会引发IndexError(索引超出序列的范围)异常。示例代码如下:10.1.2常见的异常list_1=[1,2,3,4,5]print(list_1[5])4.IndexError异常由于list_1列表中没有索引为5的元素,因此当使用索引5访问列表元素时,程序出现IndexError异常,如图10-4所示。图10-4

IndexError异常当使用字典中不存在的“键”时,会引发KeyError(字典中查找一个不存在的关键字)异常。示例代码如下:10.1.2常见的异常dict_1={′one′:1,′two′:2,′three′:3}print(dict_1[′one′])print(dict_1[′three′])print(dict_1[′four′])5.KeyError异常由于字典中只有“one”“two”和“three”3个键,因此当获取“four”键对应的值时,程序出现KeyError异常,如图10-5所示。10.1.2常见的异常图10-5

KeyError异常当尝试访问一个未声明的变量时,会引发NameError(尝试访问一个不存在的变量)异常。示例代码如下:10.1.2常见的异常a=1c=a+bprint(c)6.NameError异常当执行程序时,由于Python解释器在任何命名空间中都没有找到变量b,因此导致程序出现NameError异常,如图10-6所示。图10-6

NameError异常当Python解释器发现语法错误时,会引发SyntaxError异常。示例代码如下:10.1.2常见的异常list_1=["a","b","c","d","e"]foriinlist_1print(i)7.SyntaxError异常由于for循环的后面缺少冒号,因此导致程序出现SyntaxError异常,如图10-7所示。图10-7

SyntaxError异常当将不同类型的数据进行运算操作时,有时会引发TypeError(不同类型间的无效操作)异常。示例代码如下:10.1.2常见的异常birth=input(′birth:′)ifbirth<2000:print("00前")else:print("00后")8.TypeError异常10.1.2常见的异常8.TypeError异常input()函数返回的数据类型是字符串。由于字符串类型数据不能直接与数字类型数据进行比较,因此导致程序出现TypeError异常,如图10-8所示。图10-8

TypeError异常10.1.2常见的异常9.ValueError异常当传给函数的参数类型不正确时,会引发ValueError(传入无效参数)异常。示例代码如下:图10-9

ValueError异常importmathmath.sqrt(-10)由于int()函数传入了无效的字符串类型参数,因此导致程序出现ValueError异常,如图10-9所示。10.1.2常见的异常10.ZeroDivisionError异常当除数为零时,会引发ZeroDivisionError(除数为零)异常。示例代码如下:图10-10

ZeroDivisionError异常a=100/0print(a)由于零不能作为除数,因此导致程序出现ZeroDivisionError异常,如图10-10所示。10.1.3Python语言中的其他异常表10-1

Python语言中的其他异常异常名称描述BaseException所有异常的基类ArithmeticError所有数值计算错误的基类AssertionError断言语句失败DeprecationWarning关于被弃用的特征的警告EnvironmentError操作系统错误的基类EOFError没有内建输入,到达EOF标记任务10.2异常处理1.捕获简单异常捕获简单异常的语法格式如下:try:#可能引发异常语句块exceptException:#异常处理语句块10.2.1try...except语句

其中,try语句块中包含可能引发异常的语句;except中的语句块用于捕获相应的异常;Exception为异常类的名称。2.捕获多个异常

捕获多个异常的结构类似于多分支选择结构,一旦try语句块中的语句抛出异常,就按顺序依次检测并与except语句块匹配。如果某个except语句块捕获到了异常,则其他except语句块将不再捕获异常。捕获多个异常的语法格式如下:try:#可能引发异常的语句块exceptException_1:#异常处理语句块1exceptException_2:#异常处理语句块2exceptException_3:#异常处理语句块3...10.2.1try...except语句3.捕获所有异常捕获所有异常的语法格式如下:try:#可能引发异常语句块except:#异常处理语句块10.2.1try...except语句【例10-3】捕获所有的异常。程序代码如右:print("捕获两个数相除的异常\n")try:number_1=float(input(′请输入被除数:′))number_2=float(input(′请输入除数:′))number_3=number_1/number_2print(′两个数相除,商为:′,number_3)except:print("****************************")print(′出现异常!′)4.捕获异常的信息描述10.2.1try...except语句【例10-4】捕获异常的信息描述。程序代码如下:print("捕获两个数相除的异常\n")try:number_1=float(input(′请输入被除数:′))number_2=float(input(′请输入除数:′))number_3=number_1/number_2print(′两个数相除,商为:′,number_3)exceptExceptionasresult:print("****************************")print("捕获到异常:%s"%result)10.2.2try...except...else语句

try...except...else语句还有一个可选的else语句块,如果要使用该语句块,则必须将其放在except语句块之后。在try语句块中的语句没有发生任何异常时,将执行该语句块。try...except...else的语法格式如下:try:#可能引发异常语句块exceptException[asresult]:#异常处理语句块else:#如果try语句块中的语句没有引发异常,则执行该语句块10.2.3try...except...finally语句

在程序执行过程中,有一种情况是,无论是否捕获到异常,程序都要执行终止行为(如关闭文件),这时可以使用finally语句块进行处理。通常情况下,finally语句块用于释放资源。try...except...finally的语法格式如下:try:#可能引发异常的语句块exceptException[asresult]:#异常处理语句块finally:#无论try语句块中的语句是否引发异常,都会执行该语句块任务10.3抛出异常格式1和格式2是对等的,都会引发指定异常类对象。格式1可以隐式地创建异常类的实例对象;格式2是最常见的,会直接提供一个异常类的实例对象;格式3用于重新引发刚发生的异常。raise异常类

#格式1,引发异常时会隐式地创建异常类对象raise异常类对象 #格式2,引发异常类对象对应的异常raise

#格式3,重新引发刚发生的异常10.3.1raise语句使用raise语句能显式地触发异常,其语法格式如下:示例代码如下:raise异常名称10.3.1raise语句使用异常名引发异常,是指当raise语句指定异常名时,会创建该类的实例对象,然后引发异常,其语法格式如下:1.使用异常名引发异常>>>raiseNameErrorTraceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>raiseNameErrorNameError直接使用该实例对象能引发异常,同时还能给异常类指定描述信息。示例代码如下:raise异常名称(异常描述)10.3.1raise语句使用异常类的实例引发异常的语法格式如下:2.使用异常类的实例引发异常>>>raiseIndexError("索引下标超出范围")Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>raiseIndexError("索引下标超出范围")IndexError:索引下标超出范围10.3.1raise语句如果捕获到异常,而又想重新引发它(传递异常),则可以使用不带参数的raise语句。示例代码如下:3.传递异常>>>try:...raiseIndexError("索引下标超出范围")...exceptIndexError:...print("程序出现了异常!")...raise...程序出现了异常!Traceback(mostrecentcalllast):File"<pyshell#1>",line2,in<module>raiseIndexError("索引下标超出范围")IndexError:索引下标超出范围10.3.2assert语句assert语句又称为断言,是一种用于调试的语句,它可以用于检测程序执行时是否满足一些前提条件。如果不满足,则会抛出一个AssertionError异常。assert语句的语法格式如下:assertexpression[,arguments]其中,expression是一个逻辑表达式,如果为False,则会抛出AssertionError异常;arguments是一个可选项,用于指定异常的错误信息。当assert语句被执行时,如果expression为False,则会抛出AssertionError异常,并将arguments作为异常信息输出。任务10.4自定义异常【例10-9】自定义异常的应用。用户注册账户时,输入的性别只能是“男”或“女”,要求自定义异

温馨提示

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

评论

0/150

提交评论