






















这是 Python 异常继承体系的顶层结构,是理解异常捕获、处理逻辑的核心基础。
BaseException(所有异常的祖宗)
├─ Exception(业务/程序异常的基类)
├─ KeyboardInterrupt(用户强制中断)
├─ GeneratorExit(生成器退出)
└─ SystemExit(解释器主动退出)
一句话总结:
BaseException 是所有异常的最终父类,它直接派生了 4 个子类,这 4 个类分工完全不同,决定了 Python 异常的捕获规则。
ValueError、TypeError、IndexError、KeyError、AttributeError、IOError、ZeroDivisionError 等Ctrl + C 强制终止程序except Exception: 捕获不到它gen.close()sys.exit()exit()quit()except Exception 拦截Exception 只能捕获程序异常,不能捕获系统退出类异常
下面这些都不会被 except Exception: 捕获:
KeyboardInterrupt(Ctrl+C)SystemExit(sys.exit)GeneratorExit(生成器关闭)它们都直接继承 BaseException。
只有 except BaseException: 才能捕获所有异常,但严禁乱用。
自定义异常必须继承 Exception,不能继承 BaseException
| 异常类名 | 父类 | 含义 | 能否被 except Exception 捕获 |
|---|---|---|---|
| BaseException | 无(根) | 所有异常的祖宗 | — |
| Exception | BaseException | 程序异常基类 | ✅ 能 |
| KeyboardInterrupt | BaseException | Ctrl+C 中断 | ❌ 不能 |
| GeneratorExit | BaseException | 生成器关闭 | ❌ 不能 |
| SystemExit | BaseException | 解释器退出 | ❌ 不能 |
try:
业务代码
except Exception as e:
只处理程序错误
# 不会拦截 Ctrl+C、sys.exit、生成器关闭
BaseException 生了四个孩子:
Exception 管程序错误,
KeyboardInterrupt 管用户中断,
SystemExit 管解释器退出,
GeneratorExit 管生成器关闭。
只有 Exception 是程序可处理异常,另外三个都属于系统控制流。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。