异常处理机制
学习目标
通过本集的学习,你将能够:
- 理解异常的传播
- 掌握异常处理模型
- 学会资源管理
- 理解错误处理策略
1. 异常概述
1.1 什么是异常?
异常是程序运行时的错误或意外情况。
异常示例:
- 除以零
- 数组越界
- 空指针访问
- 文件不存在
- 网络连接失败1.2 异常 vs 返回错误码
返回错误码(C 风格):
int read_file(const char *filename) {
FILE *f = fopen(filename, "r");
if (f == NULL) {
return -1; // 错误码
}
// ...
return 0; // 成功
}
问题:
- 容易忽略错误
- 错误码不够表达
- 污染返回值异常(Java/Python):
def read_file(filename):
try:
f = open(filename, "r")
# ...
f.close()
except FileNotFoundError:
print("File not found")
优点:
- 不能忽略
- 表达力强
- 分离正常和错误代码2. 异常的传播
2.1 调用栈展开
异常沿着调用栈向上传播。
调用栈:
main()
↓
f()
↓
g()
↓
h() 抛出异常
传播:
h() → g() → f() → main() → 未捕获,程序崩溃2.2 示例
Python 示例:
def h():
raise ValueError("Something went wrong")
def g():
h()
def f():
g()
def main():
try:
f()
except ValueError as e:
print("Caught:", e)
main() // 输出: Caught: Something went wrong3. 异常处理模型
3.1 try-catch
try-catch(Java):
try {
// 可能抛出异常的代码
} catch (ExceptionType1 e) {
// 处理 ExceptionType1
} catch (ExceptionType2 e) {
// 处理 ExceptionType2
} finally