news 2026/4/30 15:01:39

Python 异常处理 完整学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 异常处理 完整学习笔记

(从基础、规范写法、常用异常、自定义异常、实操避坑 全整理,适配你的代码习惯)

一、异常核心基础概念

  1. 什么是异常

代码运行时出现的错误、逻辑非法、参数不合法等,导致程序强制终止的报错,就是异常。

  1. 主动抛出异常关键字

只有raise是 Python主动抛异常的关键字

  1. 两种报错本质区别
  2. 写法:raise "错误信息"

❌ 非法写法,不是业务异常,是 Python 语法报错:TypeError: exceptions must derive from BaseException

  1. 写法:Exception("错误信息")

✅ 标准规范,主动抛出业务异常,可被正常捕获、识别。

二、主动抛出异常 标准写法

1. 万能通用写法(日常开发首选)

不知道该用什么具体异常类型时,统一用顶层父类Exception,全覆盖、不报错、好维护。

# 万能格式 raise Exception("自定义错误提示文本")

2. 规范细分内置异常(追求严谨时使用)

内置异常是 Python 自带分类,对应不同错误场景:

  1. AttributeError:属性不存在(适配你的 Config 配置类)
  2. ValueError:数值 / 参数非法
  3. KeyError:字典键不存在
  4. TypeError:数据类型错误

示例:

# 属性不存在专用 raise AttributeError("配置类无此属性") # 数值错误专用 raise ValueError("年龄超出合法范围")

三、异常捕获基础try...except

作用:拦截异常,防止程序崩溃,优雅处理错误。

try: # 可能出错的代码 Config.set_attr("test", 123) except Exception as e: # 捕获异常并打印信息 print("执行失败:", e)

四、异常的传递与复用

  1. 重新抛出原有异常
try: 1 / 0 except: raise # 原样抛出上层异常,不修改信息
  1. 异常链式改写(极少用,了解即可)

五、自定义异常类(重点理解)

1. 核心理解

  1. 所有异常最终都继承自BaseException
  2. 自定义异常,只需要继承Python内置Exception
  3. 作用:区分项目业务错误、系统错误,让报错分类更清晰,方便后期排查。

2. 自定义异常 基础语法

# 自定义业务异常基类 class BusinessError(Exception): """项目所有业务异常的父类""" pass # 细分场景异常 class ConfigAttrError(BusinessError): """配置类属性不存在异常""" pass class ParamError(BusinessError): """参数非法异常""" pass

3. 自定义异常 实战使用

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. 自定义异常的价值

  1. 区分系统异常自己项目业务异常
  2. 捕获时可以精准拦截:
try: Config.set_attr("xxx", 1) except ConfigAttrError: # 只处理配置错误 print("配置校验失败") except Exception: # 处理其他所有错误 print("系统未知错误")
  1. 大型项目、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)

七、关键避坑总结

  1. ❌ 禁止:raise "文字"
  2. ✅ 强制:raise异常类(提示文字)
  3. 日常开发:优先raise Exception("提示")够用
  4. 精细化开发:使用对应内置异常 / 自定义异常
  5. 异常不要滥用:正常业务逻辑不要靠异常控制,只用于「非法、错误场景」

八、极简背诵口诀

  1. 抛异常必带异常类,不能直接抛字符串;
  2. 通用报错用 Exception,细分场景用内置异常;
  3. 自定义异常继承 Exception,用于业务分类;
  4. 异常用来兜底防崩溃,不用来替代正常判断。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 15:01:34

告别理论推导!用STM32CubeMX+Keil5,10分钟搞定SVPWM七段式算法代码生成

10分钟实战:用STM32CubeMXKeil5快速生成SVPWM七段式驱动代码 当你拿到一块无刷电机开发板,老板要求明天就演示PWM波形时,没人愿意花三天时间推导空间矢量方程。作为在电机控制领域踩过无数坑的工程师,我想分享一个跳过数学推导、直…

作者头像 李华
网站建设 2026/4/30 15:00:29

在Node.js后端服务中集成多模型API以应对不同任务需求

在Node.js后端服务中集成多模型API以应对不同任务需求 1. 多模型API接入的核心价值 现代后端服务常需要根据任务特性选择不同的大模型能力。Taotoken提供的统一API层允许开发者通过单一接入点调用多种模型,无需为每个供应商单独维护认证与计费逻辑。这种架构特别适…

作者头像 李华
网站建设 2026/4/30 14:57:51

归一化流中的双向表示对齐技术解析

1. 项目背景与核心问题在生成模型领域,归一化流(Normalizing Flows)因其精确的概率密度计算和可逆变换特性,近年来受到广泛关注。然而传统归一化流模型存在一个根本性矛盾:正向变换(从简单分布到复杂分布&a…

作者头像 李华
网站建设 2026/4/30 14:57:31

机器人运动规划技术:cuRobo的GPU加速与全局优化

1. 机器人运动规划的技术挑战与行业需求在工业自动化领域,机器人运动规划一直是个令人头疼的问题。想象一下,你正在指挥一个六轴机械臂在拥挤的仓库货架间穿行——它不仅要避开各种障碍物,还要确保动作流畅不抖动,同时满足关节角度…

作者头像 李华
网站建设 2026/4/30 14:57:26

告别手动拼接:Chrome扩展如何一键捕获完整网页的终极指南

告别手动拼接:Chrome扩展如何一键捕获完整网页的终极指南 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-ex…

作者头像 李华
网站建设 2026/4/30 14:56:24

一文读懂 SD-WAN 全链路安全防护体系

前言数字化转型浪潮下,跨地域分支办公、多业务上云已成为企业运营的常态,传统广域网组网灵活性不足、部署成本高、调度效率低的短板愈发凸显。SD-WAN(软件定义广域网)凭借公网低成本组网、智能流量调度、分支快速上线等核心优势&a…

作者头像 李华