版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
定制警示-⾃定义异常⾃定义异常及其应⽤Customexceptionsandtheirapplications固若⾦汤-成为【固堤⼈】ImpregnableasaRock-Becomea"Tilebreaker""治⽔之路,
常有意外(异常)。需有应对之策,
⽅能确保⼤堤稳固,程序健壮。""本次升级任务名为【固若⾦汤】,
⽬标是助你成为—名真正的【固堤⼈】。""回顾上—次的修⾏
,你已掌握了处理Python内置'险情'的⽅法。本次,我们将更进—步,定制专属的'警示符',
以应对更具体的'⽔利险情'。"⻓⽼的启示:固若⾦汤—智水长老升级任务进度TheprogressoftheUpgradetask完成本任务,成为【塑模家】!当前任务任务:定制警示-⾃定义异常进行中>>>已完成任务任务:坚固之基-异常与错误处理已完成本次任务:定制警示-⾃定义异常Thistask:CustomizedAlerts-Customizeexceptions任务⽬标理解为什么需要⾃定义异常学会如何创建⾃定义异常类(继承⾃Exception)掌握如何使⽤raise抛出⾃定义异常结合⽔利⼯程案例,
学习⾃定义异常的实际应⽤01第一节为何需要'定制警示'?⾃定义异常的必要性Whyis"customizedwarning"needed?Thenecessityofcustomizingexceptions超越内置:更精确的'险情'描述BeyondBuilt-in:Moreprecisedescriptionof'danger'⾃定义异常的优势内置异常的局限性特定业务场景的错误更精确表达可以包含更多与错误相关的业务信息更好的错误层级结构,便于异常处理内置"警示"(
异常)
如通⽤符篆,
能应常见之灾。
然特定⽔利⼯程,
其"险情"亦有独到之处,
需特制"警示符"⽅能精准内置异常(如
ValueError,TypeError)有时过于宽泛,不能清晰表达特定业务逻辑中的错误。例如,⽔库⽔位超限,可以⽤
ValueError
,但不如—个专⻔的WaterLevelExceededError
更直观。代码'⾔灵':增强可读性与可维护性Code'WordSpirit':Enhancereadabilityandmaintainability增强代码可读性当其他⼈阅读你的代码时,一个明确的⾃定义异常名称(如DamIntegrityError
)
⽐—个通⽤的
Exception
更能说明问题。#使⽤通⽤异常try:process_water_level(level)exceptException
as
e:#需要检查异常消息来判断是什么类型的错误if"water
level
too
high"
in
str(e):initiate_flood_control()#很容易错过某些情况
...#使⽤⾃定义异常try:process_water_level(level)exceptWaterLevelTooHighError:#明确知道是什么错误,
直接处理initiate_flood_control()提⾼可维护性维护时,可以快速定位和理解特定类型的业务错误。'阵法'细分:更精细的异常处理"Arrayformation"subdivision:Morerefinedexceptionhandling通过⾃定义异常,可以为不同类型的业务错误编写特定的
except
处理块。精细的异常捕获与处理例如,可以分别捕获LowWaterPressureError
和PipeBurstError,并执⾏不同的应急预案。这使得错误处理逻辑更加清晰和有针对性。运⾏程序遇到错误?否是错误类型?执⾏泄洪通用错误处理关闭阀⻔并维增加供⽔压⼒LowWaterPressureError继续执行PipeBurstErrorWaterLevelError其他错误02第二节'符篆'绘制:创建⾃定义异常'SealScript'Drawing:Createcustomexceptions继承'法统':基于Exception类Inheritingthe'lineage':BasedontheExceptionclass#从
ValueError继承,表示这是—个值错误class
WaterLevelTooHighError(ValueError):pass#从RuntimeError继承,表示这是—个运⾏时错误classPumpFailureError(RuntimeError):passclass
MyCustomError(Exception):#通常,
最简单的⾃定义异常只需要
pass即可pass基本语法⾃定义异常通常通过创建一个新的类,并使其继承⾃Python内置的Exception类或其⼦类来实现。MyCustomError就是一个⾃定义异常类型。异常继承体系你也可以从更具体的异常类继承,
以表明异常的性质:异常继承体系结构图ArchitecturediagramofabnormalinheritancePython的异常体系是—个层次化的结构。所有异常都继承⾃BaseException,⽽我们通常使⽤的异常类都继承⾃Exception。创建⾃定义异常时,可以根据异常的性质选择合适的⽗类,例如值错误类型继承⾃ValueError,运⾏时错误继承⾃RuntimeError。异常继承关系说明BaseException+异常基类Exception+常规异常基类ValueErrorRuntimeErrorMyCustomError+⾃定义异常WaterLevelTooHighErrorPumpFailureError异常继承体系结构图ArchitecturediagramofabnormalinheritancePython的异常体系是—个层次化的结构。所有异常都继承⾃BaseException,⽽我们通常使⽤的异常类都继承⾃Exception。创建⾃定义异常时,可以根据异常的性质选择合适的⽗类,例如值错误类型继承⾃ValueError,运⾏时错误继承⾃RuntimeError。异常继承关系说明BaseException+异常基类Exception+常规异常基类ValueErrorRuntimeErrorMyCustomError+⾃定义异常WaterLevelTooHighErrorPumpFailureError添墨加彩:为'警示符'添加信息Addcolorandcolor:Addinformationtothe"warningsign"添加异常上下⽂信息可以在⾃定义异常类的__init__⽅法中添加额外的属性,以存储更多关于错误的上下⽂信息。我们添加了⾃定义属性current_level和limit来存储⽔位相关信息。classWaterLevelError(Exception):def
__init__(self,message,current_level,
limit):super().__init__(message)#调⽤⽗类的
__init__self.current_level=current_levelself.limit=
limitdef
__str__(self):#可选:
⾃定义异常的字符串表示return
f"{super().__str__()}当前⽔位
:{self.current_level},
限制
:
{self.limit}""警示符"不仅需示警,亦可承载"险情"之细节,如时间、地点、缘由,以便查验。03第三节'警示'发动:抛出与捕获⾃定义异常"Alert"activation:Throwandcatchcustomexceptionsraise与⾃定义'警示符'raiseandCustom'Alert'def
check_reservoir_level(level):MAX_LEVEL=100#假设⽔库最⾼安全⽔位if
level>MAX_LEVEL:#抛出⾃定义异常实例raiseWaterLevelError("⽔库⽔位超出安全上限!
",level,MAX_LEVEL)print(f"当前⽔位{level}⽶
,
正常。
")使⽤raise抛出⾃定义异常使⽤raise关键字抛出⾃定义异常的实例。抛出异常的时机何时应该抛出异常?通常在以下情况:检测到不符合业务规则的输⼊值程序进⼊了不应该进⼊的状态外部资源不可⽤或⾏为异常需要⽴即终⽌当前操作并通知调⽤者注意:异常应该⽤于真正的异常情况,不应该⽤于控制正常的程序流程。try-except捕获⾃定义'警示'try-exceptcatchescustom'alerts'⾃定义异常和内置异常一样,可以使⽤try-except块来捕获。捕获并处理⾃定义异常try:check_reservoir_level(105)except
WaterLevelError
as
wle:#捕获⾃定义的
WaterLevelErrorprint(f"发⽣⽔位错误
:{wle}")#此处可以记录⽇志、发送警报等#可以访问异常的⾃定义属性overflow=wle.current_level-wle.limitprint(f"⽔位超出限制
:{overflow}⽶
")except
Exception
as
e:#
捕获其他未知异常print(f"发⽣未知错误
:{e}")finally:print("⽔位检查完成。
")try-except捕获⾃定义'警示'try-exceptcatchescustom'alerts'运⾏程序异常?其他异常WaterLevelError记录⽇志/发送警报跳过所有except块执⾏Exceptionexcept块继续执行第—个except块获取overflow值执⾏finally块无异常异常层级:构建有序'警示系统'Abnormallevel:Buildanorderly'warningsystem'#基础异常类classWaterSystemError(Exception):"""⽔系统相关所有错误的基类"""passclassWaterLevelError(WaterSystemError):"""⽔位相关错误"""passclassWaterQualityError(WaterSystemError):"""⽔质相关错误"""passclassWaterLevelTooHighError(WaterLevelError):"""⽔位过⾼错误"""passclassWaterLevelTooLowError(WaterLevelError):"""⽔位过低错误"""pass构建异常层级结构异常层级:构建有序'警示系统'Abnormallevel:Buildanorderly'warningsystem'层级异常的处理try:#可能引发各种⽔系统错误的代码check_water_system()exceptWaterLevelTooHighErrorase:#处理⽔位过⾼情况start_emergency_discharge()exceptWaterLevelTooLowErrorase:#处理⽔位过低情况stop_discharge()except
WaterLevelError
as
e:#处理其他⽔位问题notify_operator("⽔位异常")except
WaterQualityError
as
e:#处理⽔质问题activate_purification()except
WaterSystemError
as
e:#处理其他⽔系统问题notify_supervisor("⽔系统通⽤错误")exceptException
as
e:#处理所有其他异常log_unexpected_error(e)总结:任务完成Summary:Thetaskiscompleted"贤徒,汝已通晓'定制警示'之妙⽤
。⾃此,⾯对千变万化之'⽔情',皆可绘制专属'符篆'(⾃定义异常),精准示警,从容应对。汝之代码'堤防',因之更为坚固
!"⻓⽼的肯定为什么需要自定义异常:为了更精确地描述特定业务的错误,增强代码的可读性和可维护性,并且能够实现更精细、更有针对性的异常处理逻辑。1如何创建自定义异常:核心是通过创建一个新的类,让它继承自Python内置的Exception类或其某个子类。我们可以在自定义异常中添加额外的属性和方法,来携带更多关于错误的上下文信息,也可以通过继承构建层级化的异常结构。2如何使用自定义异常:在检测到错误条件时,使用raise关键字抛出自定义异常的实例。然后,在调用代码的地方,使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中建新员工入职一百天成长
- 室内设计色彩分析
- 心脏疾病医疗科普
- 耳鼻喉科咽喉炎康复指南
- 风湿免疫科类风湿关节炎康复训练指南培训方案
- 生产业务的会计制度设计
- 景观设计转正工作汇报与规划
- 预防医学科疫苗接种管理详细指南
- 豆奶包装设计
- Spark日志处理案例分析课程设计
- 2026年CAAC无人机理论考试题库及答案(轻巧夺冠)
- 2026届江苏南通市高三语文二模作文导写
- 甲状腺功能亢进症诊疗中国指南(2026 版)
- 期末复习课件2025-2026学年统编版八年级历史下册
- FEV咨询-2025中国汽车产业分析报告 2025 China automotive industry analysis report
- 2026河北邯郸市劳动就业服务局招聘公益性岗位人员考试参考题库及答案解析
- 2026贵州贵阳贵安卫生健康系统事业单位招聘231人考试备考试题及答案解析
- 2025四川省成都市中考物理试题(解析版)
- 2026年哈三中高三下学期三模数学试卷及答案
- 2026年传统工艺短视频拍摄技巧
- 2025年新疆八年级地理生物会考真题试卷(含答案)
评论
0/150
提交评论