精品课件----Python常见异常处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Python常见异常处理学习目标理解异常的概念12掌握处理异常的几种方式掌握raise和assert语句,会抛出自定义的异常34掌握with和as环境安装器的使用01异常简介02异常类03异常处理目录页04抛出异常05自定义异常06with和as环境安装器异常介绍在Python中,程序在执行的过程中产生的错误称为异常,比如列表索引越界、打开不存在的文件等。print(a)open(123.txt,r)这两行代码会报错吗?异常介绍报错信息:NameError:name'a'isnotdefinedFileNotFoundError:[Errno2]Nosuchfileordirectory:'123.txt'•第1个异常的类型为NameError(名称),描述信息为a没有定义;•第2个异常为FileNotFoundError,描述信息为没有找到123.txt文件过渡页01异常简介02异常类03异常处理04抛出异常05自定义异常06with和as环境安装器02异常类异常类所有异常都是基类Exception的成员,它们都定义在exceptions模块中。如果这个异常对象没有进行处理和捕捉,程序就会用所谓的回溯(traceback,一种错误信息)终止执行,这些信息包括错误的名称(例如NameError)、原因和错误发生的行号。异常类1.NameError尝试访问一个未声明的变量,会引发NameError。Traceback(mostrecentcalllast):FileD:/PythonCode/Chapter09/异常.py,line1,inmoduleprint(foo)NameError:name'foo'isnotdefined异常类2.ZeroDivisionError当除数为零的时候,会引发ZeroDivisionError异常。Traceback(mostrecentcalllast):FileD:/PythonCode/Chapter09/异常.py,line1,inmodule1/0ZeroDivisionError:divisionbyzero异常类3.SyntaxError当解释器发现语法错误时,会引发SyntaxError异常FileD:/PythonCode/Chapter09/异常.py,line2foriinlist^SyntaxError:invalidsyntax异常类4.IndexError当使用序列中不存在的索引时,会引发IndexError异常Traceback(mostrecentcalllast):FileD:/PythonCode/Chapter09/异常.py,line2,inmodulelist[0]IndexError:listindexoutofrange异常类5.KeyError当使用映射中不存在的键时,会引发KeyError异常。Traceback(mostrecentcalllast):FileD:/PythonCode/Chapter09/异常.py,line2,inmodulemyDict['server']KeyError:'server’异常类6.FileNotFoundError试图打开不存在的文件时,会引发FileNotFoundErrorTraceback(mostrecentcalllast):FileD:/PythonCode/Chapter09/异常.py,line1,inmodulef=open(test)FileNotFoundError:[Errno2]Nosuchfileordirectory:'test’异常类7.AttributeError当尝试访问未知对象属性时,会引发AttributeError异常Traceback(mostrecentcalllast):FileD:/PythonCode/Chapter09/异常.py,line6,inmoduleprint(car.name)AttributeError:'Car'objecthasnoattribute'name’过渡页01异常简介02异常类03异常处理04抛出异常05自定义异常06with和as环境安装器03异常处理捕获简单异常try-except语句定义了监控异常的一段代码,并提供了处理异常的机制。try:#语句块except:#异常处理代码捕获多个异常处理多个异常的try-except语句格式如下:try:#语句块except异常名称1:#异常处理代码1except异常名称2:#异常处理代码…捕获异常的描述信息当出现多种异常时,为了区分不同的错误信息,可以使用as获取系统反馈的信息。#获取描述信息except(ZeroDivisionError,ValueError)asresult:print(捕捉到异常:%s%result)捕获所有的异常当程序中出现大量异常时,捕获这些异常是非常麻烦的。这时,我们可以在except子句中不指明异常的类型,这样,不管发生何种类型的异常,都会执行except里面的处理代码。没有捕获到异常(else)如果try语句没有捕获到任何的错误信息,就不再执行任何except语句,而是会执行else语句。终止行为(finally)在程序中,无论是否捕捉到异常,都必须要执行某件事情,例如关闭文件、释放锁等,这时可以提供finally语句处理。通常情况下,finally用于释放资源。过渡页01异常简介02异常类03异常处理04抛出异常05自定义异常06with和as环境安装器04抛出异常raise语句使用raise语句能显示地触发异常,格式如下:1.raise异常类名2.raise异常类对象3.raise引发指定异常类的实例重新引发刚刚发生的异常raise语句1.使用类名引发异常当raise语句指定异常的类名时,会创建该类的实例对象,然后引发异常。raiseIndexErrorTraceback(mostrecentcalllast):FileD:/异常.py,line1,inmoduleraiseIndexErrorIndexErrorraise语句2.使用异常类的实例引发异常index=IndexError()raiseindexTraceback(mostrecentcalllast):FileD:/异常.py,line2,inmoduleraiseindexIndexErrorraise语句3.传递异常try:raiseIndexErrorexcept:print(出错了)raise不带任何参数的raise语句,可以再次引发刚刚发生过的异常,作用就是向外传递异常。出错了FileD:/异常.py,line2,inmoduleraiseIndexErrorIndexErrorraise语句4.指定异常的描述信息raiseIndexError(索引下标超出范围)Traceback(mostrecentcalllast):FileD:/异常.py,line1,inmoduleraiseIndexError(索引下标超出范围)IndexError:索引下标超出范围raise语句5.异常引发异常try:numexceptExceptionasexception:raiseIndexError(下标超出范围)fromexception使用raise...from…可以在异常中抛出另外的异常。try里面只定义了变量num,会引发NameError异常。except子句使用raise...from…抛出NameError异常后再抛出“下标越界”的异常。assert语句assert语句又称作断言,指的是期望用户满足指定的条件。当用户定义的约束条件不满足的时候,它会触发AssertionError异常,所以assert语句可以当做条件式的raise语句。assert语句assert语句格式如下:assert逻辑表达式,dataassert后面紧跟一个逻辑表达式,相当于条件。Data通常是一个字符串,当条件为false时作为异常的描述信息。ifnot逻辑表达式:raiseAssertionError(data)断言的示例如下:assert语句a=0asserta!=0,a的值不能为0Traceback(mostrecentcalllast):FileD:/异常.py,line2,inmoduleasserta!=0,a的值不能为0AssertionError:a的值不能为0过渡页01异常简介02异常类03异常处理04抛出异常05自定义异常06with和as环境安装器05自定义异常创建一个继承Exception类的子类,就是自定义异常类。当遇到自己设定的错误时,使用raise语句抛出自定义的异常。自定义异常过渡页01异常简介02异常类03异常处理04抛出异常05自定义异常06with和as环境安装器06with和as环境安装器with语句现在有一个需求,打开foo.txt文本文件,读取完所有的数据以后关闭文件。示例代码如下:file=open(“/tmp/foo.txt”)#打开文件data=file.read()#读取数据file.close()#关闭文件文件读取出现问题怎么办?忘记关闭文件出现问题怎么办?with语句为了避免在文件读取的过程中产生这些问题,可以在上述示例中增加处理异常的语句,加强版本如下:file=open(/tmp/foo.txt)try:data=file.read()finally:file.close()该代码虽然解决了产生异常的可能,但是这段代码过于冗长。此时,在示例中使用with语句处理上下文环境产生的异常,具体如下。withopen(/tmp/foo.txt)asfile:data=file.read()with语句Python2.5开始,引入了with语句,with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源。with语句withcontext_expr[asvar]:with_bodywith语句格式•context_expr:需要返回一个上下文管理器对象,该对象并不赋值给as子句中的var。•var:可以是变量或者元组。•with_body:with语句包裹的代码块。with语句with语句执行过程:(1)执行context_expr,生成上下文管理context_manager;(2)调用上下文管理器的__enter__()方法,如果使用了as子句,就把__enter__()方法的返回值赋值给as子句中的var;(3)执行语句体with_body。(4)无论在执行的过程中是否发生异常,都会执行上下文管理器的__exit__()方法。该方法负责执行程序的“清理”工作,如释放资源等。with语句with语句执行过程:(5)如果执行过程中没有出现异常,或者语句体中执行了break、continue或者return语句,则以None作为参数调用__exit__()方法;如果执行过程中出现异常,则会使用sys.exc_info得到的异常信息为参数调用__exit__()方法。(6)出现异常时,如果__exit__()方法返回的结果为False,则会重新抛出异常,让with之外的语句逻辑来处理异常,这是通用做法;如果返回True,则忽略异常,不再对异常进行处理。上下文管理器要想使用with语句进行工作,前提是要有上下文管理器。上下文管理器是Python2.5开始支持的一种语法,用于规定某个对象的使用范围,一旦进入或者离开使用范围,会有特殊的操作被调用。1.上下文管理协议上下文管理器•__enter__(self):进入上下文管理器时调用此方法,其返回值被放入with-as语句中as说明符指定的变量中。•_exit__(self,type,value,tb):离开上下文管理器调用此方法。如果有异常出现,type、va

1 / 71
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功