Python程序开发基础 课件 项目9 处理异常_第1页
Python程序开发基础 课件 项目9 处理异常_第2页
Python程序开发基础 课件 项目9 处理异常_第3页
Python程序开发基础 课件 项目9 处理异常_第4页
Python程序开发基础 课件 项目9 处理异常_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

项目9处理异常项目内容为查询身份证归属地添加异常检测系统密码异常0102项目目标知识目标熟悉异常的含义及捕获异常的方法熟悉处理异常的方法熟悉抛出异常的方法熟悉自定义异常的方法会捕获异常并处理异常会抛出异常会自定义异常技能目标

为查询身份证归属地添加异常01

现实生活并不是一帆风顺的,总会遇到各种突发情况,譬如,飞机延误、火车晚点、上下班路上堵车等,这些情况都会导致上班迟到、会议错过、约会赶不上。同样,程序在运行过程中也会遇到各种各样的问题,最常见的问题就是语法错误。当开发人员编写了不符合Python语法格式的代码时程序就会被中止运行。除此之外还有逻辑错误,即语法格式正确但在运行时仍会发生错误。无论是哪种错误,都会导致程序无法正常运行。当程序被中止时,屏幕上会显示如下信息:错误类型错误信息错误位置异常的定义异常是指在程序运行过程中检测到的错误。若异常不被处理,默认情况下会导致程序崩溃而中止运行。异常的分类所有的异常类都继承自基类BaseException。BaseException类中包含4个子类,其中子类Exception是大多数常见异常类的父类。Exception中常见的子类及其描述见下表。类名描述SyntaxError发生语法错误时引发FileNotFoundError未找到指定文件或路径时引发NameError未找到指定变量时引发ZeroDivisionError除数为0时引发IndexError索引超出范围时引发AttributeError访问了未知的对象属性时引发KeyError当映射的键不存在时引发TypeError使用的数据类型不符时引发捕获异常try-except语句try-except语句用于捕获程序运行过程中出现的异常,其格式如下:try:

可能出错的代码......except[异常类型]:

错误处理语句......try:

s=0

foriinrange(3):

sum+=i

print(sum)exceptTypeError:

print('sum没有定义')譬如:执行过程如下:解释器优先执行try子句中的代码。若try子句未产生异常,则忽略except子句中的代码。若try子句产生异常,则忽略try子句的剩余代码,转而执行except子句中的代码。try-except语句捕获单个异常捕获程序运行过程中的单个异常时,需要指定具体的异常。try:s=0foriinrange(3):sum+=iprint(sum)exceptTypeErrorase:print(f"异常原因:{e}")捕获程序运行过程中的多个异常时,既可以将多个异常以元组形式放在except语句后面来处理,也可以联合使用多个except语句。try:print(count)except(NameError,IndexError)aserror:print(f"异常原因:{error}")try:print(count)exceptNameErroraserror:print(f"异常原因:{error}")exceptIndexErroraserror:print(f"异常原因:{error}")捕获多个异常捕获程序运行过程中的所有异常时,既可以将所有异常的父类Exception置于except后面来处理,也可以采用省略except后面的异常类型的方式来处理。try:print(count)exceptExceptionaserror:print(f"异常原因:{error}")try:print(count)except:print("程序出现异常,原因未知")捕获所有异常else子句与try-except语句连用时,其中的代码会在try子句未出现异常时执行。try:

可能出错的语句......except:

出错后的执行语句else:

未出错时的执行语句try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"n=eval(input("请输入一个整数:"))

print(alp[n])except(NameError,TypeError):print("输入错误,请输入一个整数")else:print("没有发生异常")譬如:else子句finally子句与try-except语句连用时,无论try-except是否捕获到异常,finally子句中的代码都要执行。try:

可能出错的语句......except:

出错后的执行语句finally:

无论是否出错都会执行的语句try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"n=eval(input("请输入一个整数:"))

print(alp[n])except(NameError,TypeError):print("输入错误,请输入一个整数")else:print("没有发生异常")finally:print("程序执行完毕")譬如:finally子句实例1:编程检测输入是否为整数,如果是整数显示出来,否则捕获错误并报错。defint_input(ch=''):try:ch=int(ch)print("%d"%ch)exceptValueError:print('出错,您输入的不是整数')if__name__=='__main__':x=input('请输入一个整数:')int_input(x)实例2:异常嵌套处理。以下是两数相加的程序:

x=int(input("x="))

y=int(input("y="))print("x+y=",x+y)该程序要求接收两个整数,并输出相加结果。但如果输入的不是整数(如字母、浮点数等),程序就会终止执行并输出异常信息。请对程序进行修改,要求输入非整数时,给出“输入内容必须为整数!”的提示,并提示用户重新输入,直至输入正确。whileTrue:try:x=int(input('x='))exceptValueError:print('输入内容必须为整数!')else:whileTrue:try:y=int(input('y='))exceptValueError:print('输入的内容必须为整数')else:breakprint('x+y=',x+y)break任务实践-为查询身份证归属地添加异常

在前面文件任务一中,用户通过输入身份证前6位数字可以查询到身份证归属地,此任务实现了归属地查询的功能,如果用户访问的“身份证码值对照表.txt”文件不在当前路径下,就会引发异常。

本任务要求通过添加异常处理功能,完善查询身份归属地的程序。

根据题意,由于“查询身份证归属地”程序需要访问当前路径下的“身份证码值对照表.txt”文件,若在读取时没有在当前路径下找到该文件,则会引发FileNotFoundError异常,所以本任务直接使用try...except语句捕获并处理FileNotFoundError异常即可。代码如下:importjsontry:f=open("身份证码值对照表.txt",'r',encoding='utf-8')content=f.read()content_dict=json.loads(content)#转换为字典类型

address=input('请输入身份证前6位:')forkey,valincontent_dict.items():ifkey==address:print(val)f.close()exceptFileNotFoundError:print("文件不存在")检测系统密码异常02当程序发生错误时都会自动抛出异常,而这里的抛出异常则是在程序中手动抛出异常。

Python中使用raise语句完成手动抛出异常。抛出异常raise语句使用异常类引发异常raise语句后可以添加具体的异常类,从而引发相应的异常。raise异常类名譬如:raiseNameError譬如:raiseNameError()raise语句后也可以添加异常类的对象,从而引发相应的异常。raise异常对象使用异常对象引发异常重新引发异常raise语句后若不添加任何内容,可重新引发刚才发生的异常,即由异常引发异常。try:num=10print(n)exceptNameErrorase:print(f'异常的原因是{e}')譬如:raiseraise异常的传递若程序中产生的异常没有被处理,产生的异常会一层一层向上传递,直至最上面一层也未做处理,就会程序崩溃。defget_width():num=int(input("请输入除数:"))width_len=10/numreturnwidth_lendefcalc_area():width_len=get_width()returnwidth_len*width_lendefshow_area():try:area_val=calc_area()print(f"正方形的面积是:{area_val}")exceptZeroDivisionErrorase:print(f"捕捉到异常:{e}")譬如除数为0产生异常ZeroDivisionError,函数中并没有对这一异常进行处理,所以就会向上层传递这个异常上一层函数也未处理,继续向上传递这个异常该层包含异常处理代码并捕获了ZeroDivisionError异常defget_width():num=int(input("请输入除数:"))width_len=10/numreturnwidth_lendefcalc_area():width_len=get_width()returnwidth_len*width_lendefshow_area():area_val=calc_area()print(f"正方形的面积是:{area_val}")

show_area()异常由第3行传递到第7行,再传递到第11行,最后到第14行,逐层传递实例3:异常传递。长度为10的正方形被分割若干份,求小正方形面积。异常处理后:defget_width():num=int(input(“请输入份数:"))

width_len=10/numreturnwidth_lendefcalc_area():width_len=get_width()returnwidth_len*width_lendefshow_area():

try:area_val=calc_area()print(f"正方形的面积是:{area_val}")

exceptZeroDivisionErrorase:print(f"捕捉到异常:{e}")show_area()assert断言语句assert断言语句用于判定一个表达式是否为真,如果表达式为True,不做任何操作,否则引发AssertionError异常。assert表达式[,参数]这里,表达式是assert语句的判定对象,参数通常是一个自定义异常或显示异常描述信息的字符串。譬如不带参数譬如带参数age=int(input('请输入年龄:'))assertage>=18,'年龄必须在18岁及以上'print("可以参加")有关异常的描述自定义异常Python允许程序开发人员自定义异常。自定义异常类的方法很简单,只需创建一个类,让它继承Exception类或其它异常类即可。classCustomError(Exception):pass#空语句,保证程序结构的完整性譬如classCustomError(Exception):passraiseCustomError

温馨提示

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

评论

0/150

提交评论