《python数据分析及其在水利工程中的应用》课件-21理解与处理内置异常_第1页
《python数据分析及其在水利工程中的应用》课件-21理解与处理内置异常_第2页
《python数据分析及其在水利工程中的应用》课件-21理解与处理内置异常_第3页
《python数据分析及其在水利工程中的应用》课件-21理解与处理内置异常_第4页
《python数据分析及其在水利工程中的应用》课件-21理解与处理内置异常_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

防患未然理解与处理内置异常Understandandhandlebuilt-inexceptions固若⾦汤-新的升级任务ImpregnableasaRock-Newupgrademission治⽔之路,常有意外(异常)。⻓⽼的指引:成为【固堤⼈】—智水长老本次升级任务名为需有应对之策,⽅能确保⼤堤稳固,程序健壮。“固若金汤”“固堤人”,⽬标是助你成为—名真正的。本次任务:防患未然-处理内置异常Thistask:Preventproblemsbeforetheyoccur-Handlebuilt-inexceptions任务⽬标理解异常认识常⻅的内置异常掌握

try-except

结构运用

else/finally子句掌握raise抛出异常认识'险情':异常的基本概念Understanding"danger":Thebasicconceptofabnormality01第一节何为'异常'?程序中的意外Therelationshipbetweenclassesandobjects异常的概念在Python中,异常是程序运⾏时出现的错误。程序开始正常执行是否出现异常?继续执行程序完成程序中断/崩溃否是程序的流程图为何要'防患未然'?处理异常的重要性Whyshouldwe"preventproblemsbeforetheyoccur"?Theimportanceofhandlingexceptions“善治⽔者,必先识险,⽽后处之泰然。“为何要'防患未然'?处理异常的重要性Whyshouldwe"preventproblemsbeforetheyoccur"?Theimportanceofhandlingexceptions防止程序崩溃0102提供有用信息03优雅处理错误处理异常的重要原因常见的“⽔⽂险情”:内置异常类型(1)Common"hydrologicalhazards":Built-inanomalytypesSyntaxError(句法之误)正确示例错误示例print("你好")print

"你好"#SyntaxError#缺少括号(

Python

2语法)常见的“⽔⽂险情”:内置异常类型(2)Common"hydrologicalhazards":Built-inanomalytypes#

尝试除以零try:result

=

10

/

0print(result)exceptZeroDivisionError:print("错误:

除数不能为零!

")#输出:错误:

除数不能为零!ZeroDivisionError(

除零之险)常见的"⽔⽂险情":内置异常类型(3)Common"hydrologicalhazards":Built-inanomalytypes(2)#使⽤未定义的变量try:print(未定义变量)except

NameError

as

e:print(f"错误:

{e}")#输出:错误:

name

'未定义变量

'

is

not

definedNameError(名实不符)常见的"⽔⽂险情":内置异常类型(4)Common"hydrologicalhazards":Built-inanomalytypes(2)#尝试将字符串与数字相加try:result=

"三峡⼤坝"

+

2023print(result)except

TypeError

as

e:print(f"错误:

{e}")#输出:错误:

can

only

concatenate

str

(not

"int")

to

strTypeError(类型错配)常见的"⽔⽂险情":内置异常类型(5)Common"hydrologicalhazards":Built-inanomalytypes(3)#尝试打开不存在的⽂件try:f=open("不存在的河图

.txt",

"r")content=

f.read()exceptFileNotFoundError:print("错误:找不到指定⽂件")#输出:错误:找不到指定⽂件FileNotFoundError(文件路径错误)构筑"法盾":try-except异常处理Buildinga"magicshield":try-exceptexceptionhandling02第二节try-except:基础"法盾"结构try-except:Thebasic"legalshield"structure开始进⼊try块执⾏try块代码继续执⾏try块继续执⾏后续代码跳转到except块正常执⾏发⽣异常执⾏try块代码否结束执⾏except块try-except

结构捕获特定"险情":指定异常类型Capturespecific"hazards":Specifytheexceptiontypetry:depth_str=input("请输⼊河道深度(

⽶):

")depth=

float(depth_str)flow_rate=

1000

/

depth来看⼀个例⼦:基础except捕获所有异常指定异常类型,针对性处理多except块处理不同异常;按序匹配,执行首个符合的处理。捕获特定"险情":指定异常类型Capturespecific"hazards":Specifytheexceptiontype错误类型2错误类型1非数字输入输入0ValueErrorZeroDivisionErrorexceptValueError:print("输⼊有误,

河道深度应为数字!

")exceptZeroDivisionError:print("河道深度不能为零!

")捕获特定"险情":指定异常类型Capturespecific"hazards":Specifytheexceptiontype开始执⾏try块代码发生异常?异常类型?执⾏ValueError处理执⾏ZeroDivisionError处理程序崩溃正常完成try块继续后续代码否是ValueErrorZeroDivisionError其他异常获取"险情"详情:访问异常对象Obtaindetailsof"Danger":AccesstheabnormalobjectexceptZeroDivisionErrorasetry:result=

some_value

/

0except

ZeroDivisionError

as

e:#

将异常实例赋值给变量eprint(f"发⽣除零险情!

具体信息:

{e}")#假设some_value

=

10#输出:

发⽣除零险情!

具体信息:exceptas异常类型变量名(e或ex)

+++division

by

zero获取"险情"详情:访问异常对象Obtaindetailsof"Danger":Accesstheabnormalobject#使⽤函数data=

read_water_level_data("⽔位数据.txt")exceptFileNotFoundError

as

e:print(f"错误:找不到⽔位数据⽂件

-{e}")

return

NoneexceptPermissionError

as

e:print(f"错误:

⽆权限读取⽂件

-{e}")return

NoneexceptException

as

e:print(f"发⽣未预期错误:

{e}")return

Nonedef

read_water_level_data(filename):try:with

open(filename,

'r')as

file:data=

file.read()return

data"法盾"强化:else与finally"MagicShield"Enhancement:elseandfinally03第三节else⼦句:风平浪静时的后续elseclause:Thefollow-upwhentheseaiscalmelse子句核心原则02位置性:需置于所有except块之后03执行性:仅try块无异常时才执行01可选性:else子句为非必需配置else⼦句:风平浪静时的后续elseclause:Thefollow-upwhentheseaiscalmtry:water_level=floatexceptValueError:print("⽔位数据⾮有效数字!

")else:#如果try块没有发⽣异常,则执⾏此代码print(f"⽔位数据记录成功

:

{water_level}⽶

")(input("输⼊当前⽔位

:

"))

#如果输⼊"5.4"#输出:⽔位数据记录成功:

5.4⽶#如果输⼊"⾼

"#输出:⽔位数据⾮有效数字!finally子句核心原则02位置性:置于try-except-else结构末尾03执行性:始终执行,不受异常/return影响01可选性:finally子句为非必需配置finally⼦句:善后事宜,⽆论风⾬finallyclause:Handletheaftermath,regardlessoftheweatherfinally⼦句:善后事宜,⽆论风⾬finallyclause:Handletheaftermath,regardlessoftheweatherfinally⼦句:善后事宜,⽆论风⾬finallyclause:Handletheaftermath,regardlessoftheweather开始执⾏try块代码完成try块继续后续代码正常执⾏是结束发⽣异常执⾏else块否关闭文件释放网络连接解锁资源进⼊try块有else⼦句?执行finally跳转到except块主动示警:使⽤raise抛出异常Activealert:Useraisetothrowanexception04第四节raise:主动引发'险情警示'raise:Activelytriggerthe"dangerwarning"raise的本质按特定条件手动、主动地引发异常raise的适用场景·输入验证·向调用者传递错误·不满足前置条件raise的实际应⽤案例PracticalapplicationcasesofraiseclassReservoir:def

__init__(self,name,capacity,

current_volume):self.name=

nameself.capacity=

capacityself.current_volume=current_volumedef

release_water(self,amount):"""从⽔库放⽔Args:amount:需要放⽔的量(

⽴⽅⽶)Raises:ValueError:如果放⽔量为负数或零RuntimeError:如果放⽔量⼤于当前⽔量"""名称容量当前水量放水方法raise的实际应⽤案例Practicalapplicationcasesofraiseamount<=0ValueErrorif

amount<=

0:raise

ValueError(f"放⽔量必须为正数")类型1raise的实际应⽤案例Practicalapplicationcasesofraiseamount>当前水量RuntimeErrorif

amount>

self.current_volume:raiseRuntimeError(f"放⽔量({amount})"f"超过⽔库当前⽔量({self.current_volume})")类型2raise的实际应⽤案例Practicalapplicationcasesofraiseamount执行正确操作self.current_volume-=amountprint(f"{self.name}成功放⽔{amount}⽴⽅⽶

")print(f"当前⽔量

:{self.current_volume}⽴⽅⽶

")类型3raise的实际应⽤案例Practicalapplicationcasesofraise#使⽤示例try:#创建

温馨提示

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

评论

0/150

提交评论