讲师中心 微信公众号
AI工具推荐 视频效率加速

Python 内置异常层级结构全解析

梦枫小哥_4381

梦枫小哥_4381

发布时间:2026-02-05 18:53:20

|

472人浏览过

|

来源于php中文网

原创

最可靠方式是调用BaseException.__subclasses__()递归遍历继承树,因其反映CPython运行时真实结构,比文档或help更全;except Exception捕不到SystemExit等退出异常,应避免except BaseException。

python 内置异常层级结构全解析

Python 异常类继承关系怎么查最可靠

直接看 BaseException 的 __subclasses__() 链,比翻文档或记忆更准——因为 CPython 源码里新增异常(比如 KeyboardInterrupt)未必全在文档“标准异常”表里列全,而 __subclasses__() 是运行时真实继承树。

实操建议:

  • 在 Python 交互式环境里执行 BaseException.__subclasses__(),得到顶层子类(如 SystemExit、KeyboardInterrupt、Exception)
  • 对每个子类再调用 __subclasses__(),递归展开(注意避开循环引用,Exception 和 BaseException 本身不互为直接父子)
  • 别依赖 help(Exception) 输出的“Subclasses”列表——它只显示模块级定义的类,漏掉动态生成的(如某些库注入的异常)

捕获 Exception 和 BaseException 的实际区别

用 except Exception: 捕不到 SystemExit、KeyboardInterrupt、GeneratorExit;但 except BaseException: 会捕到——这在写守护进程或 CLI 工具时极易出问题:比如你本想优雅退出,却因捕了 BaseException 把 Ctrl+C 给吞了,导致程序无法中断。

常见错误现象:

立即学习“Python免费学习笔记(深入)”;

  • 脚本加了 except BaseException: 后,Ctrl+C 失效,必须 kill -9
  • 单元测试里用 self.assertRaises(BaseException) 断言失败,因为测试框架本身抛的是 AssertionError(继承自 Exception),不是 BaseException 直系子类

正确做法:除非你在写解释器或信号拦截层,否则一律用 except Exception:;真要处理退出信号,显式捕 KeyboardInterrupt 或 SystemExit。

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载

raise 时不带参数和带 None 的行为差异

在 except 块里写 raise(无参数)会原样重抛当前异常,保留原始 traceback;写 raise None 是语法错误,Python 3.10+ 会报 SyntaxError: invalid syntax;而 raise e(其中 e 是捕获的异常实例)会创建新 traceback,丢失原始上下文。

使用场景与风险:

  • 日志后透传异常:用 raise(空 raise),不要 raise e
  • 想改写异常类型但保留 traceback:用 raise NewError(...) from e,触发异常链
  • raise e 在多线程/协程中尤其危险——原始异常可能来自其他上下文,traceback 完全失真

自定义异常该继承 Exception 还是 RuntimeError

绝大多数情况继承 Exception 就够了。继承 RuntimeError 只在明确表示“程序运行时发生了未预期状态,且不属于 I/O、类型、逻辑等已有分类”时才合理——比如异步任务调度器检测到死锁,或 ORM 发现对象状态不一致。

性能与兼容性影响:

  • 所有内置异常检查(如 isinstance(e, Exception))对 Exception 子类天然兼容;若继承 RuntimeError,需额外确认下游是否只检查 Exception
  • 某些框架(如 Flask 的错误处理器)默认只捕 Exception 及其子类,不处理 RuntimeError 的子类,除非显式注册
  • 别为了“显得更具体”而深挖继承链——MyAppError 继承 Exception 比继承 ValueError 更安全,除非你真要参与 int() 那类函数的错误语义

真正容易被忽略的是:异常类名末尾要不要加 Error 或 Exception。PEP 8 明确建议用 Error(如 ParseError),但很多主流库(requests、sqlalchemy)混用。统一就行,别在同一个项目里既有 ConnectionError 又有 TimeoutException。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
flask框架如何搭建
flask框架如何搭建

搭建步骤:1、安装Python和Pip;2、创建虚拟环境;3、安装Flask;4、创建Flask应用;5、运行应用;6、访问应用。想了解更多flask框架的相关内容,可以阅读本专题下面的文章。

4015

2024.06.27

Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

6184

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

316

2025.12.15

flask框架如何搭建
flask框架如何搭建

搭建步骤:1、安装Python和Pip;2、创建虚拟环境;3、安装Flask;4、创建Flask应用;5、运行应用;6、访问应用。想了解更多flask框架的相关内容,可以阅读本专题下面的文章。

4015

2024.06.27

Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

6184

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

316

2025.12.15

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1029

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3220

2023.10.25

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn