Python程序设计教程 课件 第10章 异常处理_第1页
Python程序设计教程 课件 第10章 异常处理_第2页
Python程序设计教程 课件 第10章 异常处理_第3页
Python程序设计教程 课件 第10章 异常处理_第4页
Python程序设计教程 课件 第10章 异常处理_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计实用教程xxx第10章异常处理本章要点异常概述Python异常处理结构自定义异常断言与上下文管理Python异常是指在程序运行中所产生的错误,这个错误可以是Python内置的错误类型,也可以是开发者自定义的错误类型。

一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是一个事件,会影响程序的执行流程,若没有用正确的方式捕获产生的异常,代码就会终止运行。10.1异常概述

异常是指程序运行时引发的错误。引发错误的原因有很多,例如除零、下标越界等。如果这些错误得不到正确的处理将会导致程序终止运行。

合理地使用异常处理结构可以使得程序更加健壮,具有更强的容错性,不会因为用户不小心的错误输入或其他运行时的原因而造成程序终止,也可以使用异常处理结构为用户提供更加友好的提示。

总的来说,编写程序时遇到的错误可大致分为2类,分别为语法错误和运行时错误。在Python中,把这种运行时产生错误的情况叫做异常(Exceptions)。【例10.1】产生异常的情况示例程序。#将一个字母转换为整型。这时Python会自动抛出TypeError异常。>>>int("Python")Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>ValueError:invalidliteralforint()withbase10:'Python'#从字典中取一个不存在的键,Python会自动抛出KeyError异常。>>>dict_demo={}>>>key_demo=dict_demo["fun"]Traceback(mostrecentcalllast):

File"<stdin>",line1,in<module>KeyError:'fun'

这里出现的TypeError和KeyError都是Python内置的异常类型,它们都继承自父类Exception。10.2Python异常处理结构try...except...结构在Python异常处理结构中使用得最为频繁,

其中try子句中的代码为可能引发异常的语句,except语句捕获相应的异常。也可为理解为,当try子句代码执行异常并且被捕获时,执行except子句语块。10.2.1try…except语句语句结构try:

语句块 #被监控的语句exceptException[asreason]:

语句块 #处理异常的语句

try:后面的语句为被被监控的try块,当这部分语句发生异常时,抛出的异常在except子句后面处理。except子句可以在异常类名字后指定一个变量。try:raiseException('spam','eggs')exceptExceptionasinst:print(type(inst))#theexceptioninstanceprint(inst.args)#argumentsstoredin.argsprint(inst)#__str__allowsargstobeprinteddirectly,#butmaybeoverriddeninexceptionsubclasses

如果try中的代码抛出了异常并被except捕获,就执行except块。【例10.2】try...except…else异常处理语句示例程序。a_list=['中国','美国','英国','法国','俄罗斯']whileTrue:

n=input('请输入字符串的序号:')

try:

n=int(n)

print(a_list[n])

exceptIndexError:

print('列表的下标必须为[0,4]之间的整数')

else:break如果try中的代码没有抛出异常,就执行else块。【例10.3】打开一个文件,在该文件中的内容写入内容,采用异常检测的程序。try:

fh=open("testfile.txt","r")

fh.write("这是一个测试文件,用于测试异常!!")exceptIOError:

print("Error:没有找到文件或读取文件失败")else:

print("内容写入文件成功")fh.close()

程序运行时,如果testfile.txt"文件不存在,则抛出异常,显示“Error:没有找到文件或读取文件失败”。如果文件存在,运行try语句块没有抛出异常,运行else后面的语句,显示“内容写入文件成功”。10.2.2多个except的try语句

带有多个except的try结构,捕获多个异常,当可能存在多个异常时,可以定义多个except来捕获多个异常,也可以在一个except中声明多个异常。定义多个except捕获多个异常语句:try...except...except...【例10.4】多个except的异常示例程序。try:

x=input('请输入被除数:')

y=input('请输入除数:')

z=float(x)/float(y)exceptZeroDivisionError:

print('除数不能为零')

exceptValueError:

print('被除数和除数应为数值类型')exceptNameError:

print('变量不存在')else:print(x,'/',y,'=',z)

程序运行时,如果除数为零,则抛出异常ZeroDivisionError,显示'除数不能为零',如果被除数,除数不是数字,抛出异常ValueError,显示'被除数和除数应为数值类型'。10.2.3try…except…finally语句Python异常处理机制还提供了一个finally语句,通常用来为try块中的程序做扫尾清理工作。在整个异常处理机制中,finally语句的功能是:无论try块是否发生异常,最终都要进入finally

语句,并执行其中的代码块。【例10.5】try…except…finally处理文件读取程序实例。try:f=open('read1.txt')exceptFileNotFoundErrorase:print(e)#[Errno2]Nosuchfileordirectory:'read1.txt'else:print("文件读写正常")finally:#无论程序是否有异常,都会走到finally分支

print("over")#over

程序运行时,如果文件read1.txt文件不存在,抛出异常[Errno2]Nosuchfileordirectory:'read1.txt',然后运行finally语句块,显示over。10.3自定义异常

通常可以继承Exception或子类。命名通常以Error和Exception为后缀。其过程为:

(1).定义异常类,从Exception类别继承。

(2).在try中使用raise语句会引起异常。

(3).except捕获异常,并执行相关命令。【例10.6】自定义的异常示例程序。class

ShortInputException(Exception):

def

__init__(self,

length,

atleast):

self.length

=

length

self.atleast

=

atleastdef

main():

try:

s

=

input('请输入

-->

')

if

len(s)

<

3:

#

raise引发一个自定义的异常

raise

ShortInputException(len(s),

3)

except

ShortInputException

as

result:#这个变量被绑定到了错误的实例

print('ShortInputException:

输入的长度是

%d,长度至少应是

%d'%

(result.length,

result.atleast))

else:

print('没有异常发生')main()

运行结果:

请输入-->aShortInputException:输入的长度是1,长度至少应是3

请输入-->python

没有异常发生

程序运行时,如果输入的字符串长度大于3,没有发生异常,运行else后面的语句,显示“没有异常发生”。如果输入的字符串长度小于3,则发生异常,采用raise引发一个自己定义的异常,显示自定义异常的内容。

10.4断言与上下文管理

断言与上下文管理是两种比较特殊的异常处理方式,在形式上比异常处理结构要简单一些。

断言一般用来判断一些bool语句,在断言成功时不采取任何措施,否则触发AssertionError(断言错误)的异常。1.断言

断言语句:assertexpression[,reason]当判断表达式expression为真时,什么都不做。如果表达式为假,则抛出异常。assert语句一般用于对特定必须满足的条件进行验证。【例10.7】断言示例程序。

a=3

b=5

asserta==b,'amustbeequaltob'运行结果:AssertionError:amustbeequaltob

采用try…except语句实现相同的处理。try:

asserta==b,'amustbeequaltob'exceptAssertionErrorasreason:print('%s:%s'%(reason.__class__.__name__,reason))运行结果:AssertionError:amustbeequaltob2.上下文管理

使用with自动关闭资源,可以在代码块执行完毕后,还原进入该代码块时的现场,不论何种原因跳出with块,不论是否发生异常,总能保证文件被正确关闭,资源被正确释放。with语句的语法如下:withcontext_expr[asvar]:

with块【例10.8】上下文关联示例程序,输出文本文件中的所有行。withopen("testfile.txt")asf:

forlineinf:

print(line,end="")

程序运行时,打开testfile.txt,读取文件中的内容,当退出with语句块时,自动关闭文件,不需要写显示的close(f)

温馨提示

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

评论

0/150

提交评论