版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
防患未然理解与处理内置异常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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇产科外阴白色病变规范化诊疗研讨
- 海底世界教学设计
- 稳定河道工程设计方法
- 奶茶店装修设计方案
- 2025-2026学年22.1函数的概念同步训练人教版数学八年级下册 含答案
- (2026.05.24)在2026年全区年轻干部座谈会上的讲话
- 麻醉后恢复过程护理指南
- 电子商务平台美术设计
- 5岁幼儿课程设计
- cpld课程设计摘要
- 会计基础及实训教案
- 烟气脱硫增设湿式电除尘器改造技术方案
- 2020年四川省达州市中考历史试卷及答案
- 五年级下册科学期末考试试卷
- 诊断学基本检查法一般检查
- 腹腔镜下肾切除术的手术配合-课件
- 登高作业SOP文档
- GB/T 2282-2022焦化轻油类产品馏程的测定方法
- GB/T 7306.1-200055°密封管螺纹第1部分:圆柱内螺纹与圆锥外螺纹
- 02-车轮定位仪操作指导(VAS-6292)课件
- 海上固定平台的安全规则
评论
0/150
提交评论