Python 异常处理 完整学习笔记
从基础、规范写法、常用异常、自定义异常、实操避坑 全整理适配你的代码习惯一、异常核心基础概念什么是异常代码运行时出现的错误、逻辑非法、参数不合法等导致程序强制终止的报错就是异常。主动抛出异常关键字只有raise是 Python主动抛异常的关键字。两种报错本质区别写法raise 错误信息❌ 非法写法不是业务异常是 Python 语法报错TypeError: exceptions must derive from BaseException写法Exception(错误信息)✅ 标准规范主动抛出业务异常可被正常捕获、识别。二、主动抛出异常 标准写法1. 万能通用写法日常开发首选不知道该用什么具体异常类型时统一用顶层父类Exception全覆盖、不报错、好维护。# 万能格式 raise Exception(自定义错误提示文本)2. 规范细分内置异常追求严谨时使用内置异常是 Python 自带分类对应不同错误场景AttributeError属性不存在适配你的 Config 配置类ValueError数值 / 参数非法KeyError字典键不存在TypeError数据类型错误示例# 属性不存在专用 raise AttributeError(配置类无此属性) # 数值错误专用 raise ValueError(年龄超出合法范围)三、异常捕获基础try...except作用拦截异常防止程序崩溃优雅处理错误。try: # 可能出错的代码 Config.set_attr(test, 123) except Exception as e: # 捕获异常并打印信息 print(执行失败, e)四、异常的传递与复用重新抛出原有异常try: 1 / 0 except: raise # 原样抛出上层异常不修改信息异常链式改写极少用了解即可五、自定义异常类重点理解1. 核心理解所有异常最终都继承自BaseException自定义异常只需要继承Python内置Exception类作用区分项目业务错误、系统错误让报错分类更清晰方便后期排查。2. 自定义异常 基础语法# 自定义业务异常基类 class BusinessError(Exception): 项目所有业务异常的父类 pass # 细分场景异常 class ConfigAttrError(BusinessError): 配置类属性不存在异常 pass class ParamError(BusinessError): 参数非法异常 pass3. 自定义异常 实战使用class Config: classmethod def set_attr(cls, name, value): if not hasattr(cls, name): # 抛自定义异常 raise ConfigAttrError(f配置项【{name}】不存在)4. 自定义异常进阶自定义错误信息class ConfigAttrError(Exception): def __init__(self, msg: str): self.msg msg super().__init__(self.msg) # 使用 raise ConfigAttrError(禁止修改私有配置属性)5. 自定义异常的价值区分系统异常和自己项目业务异常捕获时可以精准拦截try: Config.set_attr(xxx, 1) except ConfigAttrError: # 只处理配置错误 print(配置校验失败) except Exception: # 处理其他所有错误 print(系统未知错误)大型项目、SDK、库开发如你的LhPyQt5必备代码更规范。六、结合你代码的实操标准示例优化后 Config 配置类异常写法# 自定义配置专属异常 class ConfigError(Exception): pass class Config: is_generate_manager_account False classmethod def set_attr(cls, name: str, value): if not hasattr(cls, name): # 规范抛异常 raise ConfigError(f当前配置类不存在属性{name}) setattr(cls, name, value)七、关键避坑总结❌ 禁止raise 文字✅ 强制raise异常类(提示文字)日常开发优先raise Exception(提示)够用精细化开发使用对应内置异常 / 自定义异常异常不要滥用正常业务逻辑不要靠异常控制只用于「非法、错误场景」八、极简背诵口诀抛异常必带异常类不能直接抛字符串通用报错用 Exception细分场景用内置异常自定义异常继承 Exception用于业务分类异常用来兜底防崩溃不用来替代正常判断。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2569119.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!