Python自定义异常怎么写_继承Exception类抛出业务专属报错
Python自定义异常必须继承Exception或其子类,否则无法被except Exception捕获;抛出时须用raise MyError("msg")而非raise MyError;需实现__init__并调用super().__init__(msg)确保可打印;推荐统一定义在errors.py中,明确处理层级与携带字段。
Python自定义异常必须继承 Exception,不能只写个空类
直接写 class MyError: 是无效的——它不会被 except Exception: 捕获,也不具备异常行为(比如没 __str__、不能被 raise 正常传播)。必须显式继承 Exception 或其子类(如 ValueError)。
- 推荐继承
Exception:语义清晰,业务异常就该是顶层异常的子类 - 避免继承
BaseException:那是系统级异常(如SystemExit)的父类,业务代码不该碰 - 如果语义贴近已有类型(比如参数错得离谱),可继承
ValueError或TypeError,但要确保逻辑合理,别为了“省事”乱继承
抛出时用 raise MyError("msg"),不是 raise MyError
漏掉括号或参数是高频错误。写成 raise MyError 会抛出 TypeError: exceptions must derive from BaseException —— 因为 Python 把类本身当成了要抛出的对象,而类不是异常实例。
- 正确写法永远是
raise MyError("用户未登录")或raise MyError()(空参也行,但建议带信息) - 如果需要传多个上下文字段(比如错误码、trace_id),在
__init__里接收并存为实例属性,别堆在字符串里解析 - 不要在
raise后加from None除非真想屏蔽原始异常链;默认保留链路对调试更重要
加 __init__ 是为了结构化携带数据,不是为了“看起来专业”
纯消息字符串够用时,其实可以不写 __init__(Python 会自动继承父类的)。但一旦你需要把错误码、HTTP 状态码、原始输入等附带信息传出去,就必须自己实现初始化逻辑,并调用 super().__init__(...) 确保消息能被打印出来。
Media.io
多功能的AI视频和图像处理平台
class UserNotFoundError(Exception):
def __init__(self, user_id: int, source: str = "db"):
self.user_id = user_id
self.source = source
super().__init__(f"User {user_id} not found in {source}")
-
super().__init__(...)这一行不能少,否则str(exc)为空,日志里只剩类名 - 实例属性(如
self.user_id)方便上层做条件判断:if isinstance(e, UserNotFoundError) and e.user_id == 123: - 别在
__init__里做耗时操作(比如查数据库、发 HTTP 请求)——异常构造应轻量
捕获时用 except MyError: 要小心模块路径和重名
自定义异常类如果定义在不同文件、不同包里,except 时容易因导入路径不一致导致捕获失败。更隐蔽的问题是:两个同名类(比如都叫 ValidationError)来自不同模块,except ValidationError: 只会捕获你当前 import 的那个。
- 始终用完整路径导入并捕获:
from myapp.errors import UserNotFoundError,然后except UserNotFoundError: - 避免在多处重复定义同名异常类;统一收口到
errors.py或类似模块 - 如果要用通配捕获(比如
except Exception:),记得自定义异常必须继承Exception,否则会被漏掉
业务异常的核心不是“怎么写类”,而是“谁负责处理它”。很多人写了漂亮异常却没人 except,或者全扔给顶层兜底,结果错误码、上下文全丢光。写之前先想清楚:这个异常预期在哪一层被捕获?需要传递哪些机器可读的字段?这些比继承语法重要得多。
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
《电竞经理2026》自定义选手教程分享
2026-07-11《电竞经理2026》中的自定义选手是游戏里非常有趣的事情,当你想要某种特质的选手,但其他属性你又不太满意的时候就可以自定义选手,我们可以先来到一个网站,就在主菜单那里,我们需要点击数据库。 电竞经理2026怎么自定义选手 本文内容来源于互联网,如有侵权请联系删除。
暗黑4S14意外错误报错解决方法
2026-07-09暗黑破坏神4新赛季S14将于7月1日正式拉开帷幕,为玩家带来前所未有的游戏体验。还有一些小bug,那么有不少小伙伴好奇S14意外错误报错怎么办,下面就来告诉大家S14意外错误报错解决方法。 暗黑4S14意外错误报错解决方法 基础排查:关闭Windows内核隔离内存完整性,重启电脑;战网扫描修复校验游戏文件。 DX/运行库缺失报错(Fatal错误):打开有修复功能的加速器, 使用C++、DX12一键...
《漫威金刚狼》内置自定义选项 可主动和谐血腥效果
2026-06-22InsomniacGames《漫威金刚狼》将带来前所未有的残酷暴力,但玩家可以自行决定屏幕上显示的血腥程度。在本月的Stateof Play直播活动中,工作室发布了一段实机宣传片,随后确认《漫威金刚狼》将包含丰富的暴力自定义选项。 游戏中有专门的辅助功能设置,通过一套精细的过滤系统来处理血腥画面: 玩家可以完全关闭动态血液飞溅效果,并在游戏过程中禁用断肢效果 过场动画也采用了类似处理方式,通过自定...
《宝可梦Pokopia》DLC新情报曝光:服装自定义系统或将登场
2026-06-19据《宝可梦Pokopia》付费DLC扩展包的数字下载卡图片显示,该游戏即将推出的三部曲扩展内容中,或将引入一项令玩家期待的全新功能——宝可梦服装自定义系统。 《宝可梦Pokopia》的付费DLC于上周的任天堂直面会上正式公布,与此同步上线的还有面向所有玩家的免费更新,后者将新增一片可探索区域并引入水下探索机制。DLC共分为三部分,首弹内容定于2026年8月正式推出。 随着首弹DLC发售日的临近,各...
迷你世界怎么自定义地图封面图片
2026-06-13首先在迷你世界开始界面,点击开始游戏,然后选择一款需要修改地图封面的游戏,点击单人游戏,进入游戏后,找一个喜欢的游戏视觉,然后调出设置界面,点下存档封面的照相机图标,就可以将现在游戏窗口界面自定义为游戏封面。 详细答案: 首先在迷你世界开始界面,点击开始游戏。 然后选择一款需要修改地图封面的游戏。 点击单人游戏。 进入游戏后,找一个喜欢的游戏视觉。 然后调出设置界面,点下存档封面的照相机图标,就可...
迷你世界如何装备自定义
2026-06-07首先创建一张地图,点击上方插件按钮,并进入道具页面;之后点击添加,并点击新建按钮新建插件,找到创建新道具,总之不断的点击“加号”样式的按钮即可,之后你会看到道具类型最后多出了一个装备类型;这个就是新增的自定义装备功能。 详细答案: 首先创建一张地图,点击上方插件按钮,并进入道具页面; 之后点击添加,并点击新建按钮新建插件,找到创建新道具,总之不断的点击“加号”样式的按钮即可,之后你会看到道具类型最...
我的世界怎么设置自定义按键
2026-06-07我的世界设置自定义按键方法:1、点击“Esc”就会出现4个按键;2、点击“设置”这个按键;3、点击“键盘和鼠标”,你就可以在下图右侧窗口如图的位置自定义按键。 详细答案: 1、点击“Esc”就会出现4个按键,如图: 2、点击“设置”这个按键,如图: 3、点击“键盘和鼠标”,你就可以在下图右侧窗口如图的位置自定义按键。 本文内容来源于互联网,如有侵权请联系删除。
五笔打字练习软件键盘布局不习惯?自定义键位映射与个性化设置【技巧】
2026-06-04五笔练习软件键位不适应需重映射:金山打字通2024版支持图形化拖拽或编辑keymap文件;极点五笔插件提供三种预设布局快捷切换;系统级可用PowerToys键盘管理器全局重映射。 五笔打字练习软件键盘布局不习惯,导致击键错误率高、肌肉记忆混乱,甚至放弃练习——这不是输入法问题,而是键位映射未适配你手指的自然落点和旧有习惯。 确认当前五笔练习软件是否支持键位重映射 打开软件主界面,点击右上角齿轮图标...
五笔打字练习软件如何导入自定义文章?针对性练习工作常用稿件【方法】
2026-06-04金山打字通支持导入本地TXT文件练习五笔:进入【五笔打字】→【文章练习】→【课程选择】选【自定义课程】→用【导入txt文章】或复制粘贴方式加载文件→命名保存即可。 想用五笔打字练习软件练自己写的会议纪要、合同条款或日报模板,但找不到导入入口?金山打字通支持直接加载你本地的TXT文档,无需转换格式,也不用一行行粘贴。 进入文章练习模块 启动金山打字通→点击顶部菜单【五笔打字】→在二级界面中找到并点击...
通义千问排查报错提示词怎么避免一眼模板感
2026-06-04报错需用原始堆栈+环境参数+四步指令精准诊断:1.指出单一根本原因;2.给出验证命令;3.提供修复命令;4.说明配置修改。只返回以上四步内容,不加说明、不加空行、不加“答:”前缀。 你想让通义千问帮你分析报错信息,但一发“请帮我看看这个报错是什么意思”,ai却回了一段套话连篇、满是“可能”“通常”“建议您”的模板化回复,既没切中你终端里那行刺眼的红色文字,也没告诉你下一步该删哪行配置、该装哪个包—...
