《Python编程基础》课件-项目3:异常处理_第1页
《Python编程基础》课件-项目3:异常处理_第2页
《Python编程基础》课件-项目3:异常处理_第3页
《Python编程基础》课件-项目3:异常处理_第4页
《Python编程基础》课件-项目3:异常处理_第5页
已阅读5页,还剩26页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

异常基础教学目标1.了解什么是异常?

2.掌握内置异常类型

3.掌握itry-except基本语法

4.学习处理特定异常异常是Python程序运行时发生的错误或意外情况,导致正常执行流程中断,继承自BaseException类,用于处理运行时问题如除零或文件不存在。核心概念:异常不同于语法错误(编译时检测),它是运行时错误。异常处理允许程序优雅地响应错误,而非崩溃。例如,在文件操作中,如果文件不存在,程序可捕获异常并提示用户。异常传播:如果未处理,会向上冒泡直至程序终止。1、什么是异常?

#一个简单的异常示例a=10b=0result=a/b#这里会引发ZeroDivisionError异常,因为除以零print(result)#这行不会执行,程序中断异常处理的重要性在于提高程序的可靠性和用户体验,避免小错误导致整个应用崩溃。核心概念:在实际开发中,异常处理用于输入验证、网络连接或数据库操作,确保程序能恢复或提供反馈。例如,在Web应用中,处理网络异常可重试请求。未处理的异常会导致资源泄漏或数据丢失。Python的异常机制是零成本的(不抛出时无开销),鼓励广泛使用。2.异常的重要性

#未处理异常的后果defdivide(x,y):#定义除法函数returnx/y#可能引发异常print(divide(5,0))#调用函数,引发异常,程序终止print("Thiswon'tprint")#后续代码不执行Python提供丰富的内置异常类型,形成层次结构,便于分类处理。核心概念:所有异常继承自Exception(BaseException的子类),常见如ValueError(无效值)、TypeError(类型错误)、FileNotFoundError(文件未找到)。层次结构允许捕获广义异常(如Exception)或具体类型。可通过help()或dir()查看异常。3.内置异常类型#常见内置异常示例try:int("abc")#引发ValueError:无效整数转换exceptValueErrorase:#捕获具体异常print(e)#输出:invalidliteralforint()withbase10:'abc'open("nonexistent.txt")#引发FileNotFoundErrortry-except是异常处理的基本结构:try块执行可能出错的代码,except块处理异常。核心概念:如果try中无异常,except跳过;否则,跳转到except。Python支持多异常捕获。4.try-except基本语法#基本try-except语法try:#尝试块x=int(input("Enteranumber:"))#可能引发ValueErrorprint(10/x)#可能引发ZeroDivisionErrorexcept:#捕获所有异常(不推荐,详见后续)print("Anerroroccurred.")#处理逻辑处理特定异常使用exceptExceptionType:,避免捕获无关错误。核心概念:指定异常类型如exceptZeroDivisionError:,提高精确性。ase访问异常对象获取细节。优先具体异常。5.处理特定异常#处理特定异常try:result=10/0#引发ZeroDivisionErrorexceptZeroDivisionError:#特定捕获print("Cannotdividebyzero!")#自定义消息exceptExceptionase:#广义捕获print(f"Unexpectederror:{e}")#输出异常信息异常未捕获向上传播,直至处理或终止。在Python中,支持链式传播。核心概念:传播允许层级处理。6.异常传播机制definner():raiseValueError("Inner")#抛出defouter():inner()#调用,未处理传播outer()#异常传播到顶层用户异常继承Exception或子类。在Python中,创建层次自定义。核心概念:继承分类自定义异常。7.用户定义异常继承classBaseError(Exception):pass#基异常classSpecificError(BaseError):pass#子异常raiseSpecificError("Detail")#抛出小结1.异常是Python程序运行时发生的错误,继承自BaseException类,与语法错误不同,它是运行时错误。2.异常处理提高程序的可靠性和用户体验,避免小错误导致整个应用崩溃。3.Python提供丰富的内置异常类型,形成层次结构,便于分类处理。4.try-except是异常处理的基本结构,支持多异常捕获和特定异常处理。异常进阶教学目标1.掌握else和finally子句的使用2.掌握多个except块的编写3.了解异常对象的属性及调用方式4.掌握嵌套try-except的实现5.掌握自定义异常的定义方法else子句在try无异常时执行,finally始终执行,用于清理。核心概念:else验证成功路径,finally释放资源如关闭文件。适合文件或网络操作。1、else和finally子句

#else和finally使用try:file=open("data.txt","r")#尝试打开文件content=file.read()#读取内容exceptFileNotFoundError:#处理文件不存在print("Filenotfound.")else:#无异常时执行print("Filereadsuccessfully.")finally:#始终执行file.close()#关闭文件,防止泄漏多个except块按顺序检查异常,处理不同情况。核心概念:从具体到广义排列,避免遮挡。Python支持except(Type1,Type2):捕获多个。2.多个except块

#多个except块try:num=int("abc")#引发ValueErrorprint(10/num)#如果前一行成功,可能ZeroDivisionErrorexceptValueError:#先检查ValueErrorprint("Invalidinput.")exceptZeroDivisionError:#再检查ZeroDivisionErrorprint("Divisionbyzero.")exceptException:#捕获其他print("Othererror.")异常对象包含错误信息,使用ase访问。核心概念:e.args获取参数,str(e)获取消息。用于日志或自定义响应。3.异常对象#访问异常对象try:[][0]#引发IndexErrorexceptIndexErrorase:#使用as访问对象print(type(e))#输出:<class'IndexError'>print(e)#输出:listindexoutofrangeprint(e.args)#输出:('listindexoutofrange',)嵌套try-except在内部块处理局部异常,外层处理传播的。核心概念:允许细粒度控制,如函数内嵌套。异常可向上传播。4.嵌套try-except#嵌套try-excepttry:#外层trytry:#内层try1/0#引发ZeroDivisionErrorexceptZeroDivisionError:#内层处理print("Innererrorhandled.")raise#重新抛出,传播到外层exceptExceptionase:#外层捕获print(f"Outercaught:{e}")自定义异常通过继承Exception创建,添加特定属性。核心概念:用于业务逻辑错误,如InvalidAgeError。提高代码可读性。5.自定义异常#自定义异常classInvalidAgeError(Exception):#继承Exceptiondef__init__(self,age):#自定义初始化self.age=agesuper().__init__(f"Age{age}isinvalid.")#设置消息defcheck_age(age):#使用自定义异常ifage<0:raiseInvalidAgeError(age)#抛出check_age(-1)#引发异常函数中异常可本地处理或传播。在Python中,函数边界传播。核心概念:函数封装处理逻辑。6.异常处理在函数中deffunc():#函数try:#本地1/0exceptZeroDivisionError:#处理print("Handled")func()#调用,处理内部线程异常不传播主线程。在Python中,用Threading捕获。核心概念:线程隔离异常。7.异常与线程importthreading#导入defworker():raiseValueError("Threaderror")#抛出t=threading.Thread(target=worker)#创建线程t.start()#启动,异常在线程内t.join()#等待小结1.else子句在无异常时执行,finally子句始终执行,用于资源清理如关闭文件2.多个except块应从具体到广义排列,以处理不同的异常情况3.异常对象可以通过as关键字访问,用于获取错误信息和参数4.自定义异常通过继承Exception类实现,用于处理特定的业务逻辑错误异常高阶教学目标1.掌握异常链

2.掌握with语句和上下文管理器

3.了解异常在调试中的作用

4.了解性能的考虑

异常链使用raise...from...链接相关异常。核心概念:在Python3中,__cause__属性追踪根因,便于调试复杂错误。1、异常链

#异常链try:int("abc")#引发ValueErrorexceptValueErrorase:raiseTypeError("Typemismatch")frome#链上新异常#输出Traceback显示链:TypeErrorcausedbyValueErrorwith语句使用上下文管理器自动处理资源,隐式异常处理。核心概念:__enter__和__exit__方法管理,如文件打开。抑制异常用__exit__返回True。2.with语句和上下文管理器#with语句withopen("file.txt","r")asf:#自动关闭content=f.read()#读取,可能异常#如果异常,__exit__处理关闭异常在调试中提供栈追踪,帮助定位问题。核心概念:使用traceback模块格式化输出,或pdb集成异常。可用raise调试。3.异常在调试中的作用importtraceback#导入traceback模块try:1/0#引发异常exceptExceptionase:traceback.print_exc()#打印详细栈追踪异常处理有开销,仅在异常路径影响性能。核心概念:正常路径零成本,但频繁抛出慢。避免在循环中使用try-except,除非必要。4.性能考虑

#性能考虑示例importtime#导入timestart=time.time()try:foriinrange(1000000):#大循环pass#无异常except:passprint(time.time()-start)#测量时间,几乎零开销最佳实践包括捕获具体异常、使用finally清理、避免裸except、记录异常。核心概念:遵循EAFP,优先尝试后处理。自定义异常清晰。5.最佳实践#最佳实践importlogging#导入loggingtry:risky_operation()#可能出错exceptSpecificErrorase:#具体捕获logging.error

温馨提示

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

最新文档

评论

0/150

提交评论