异常处理机制

学习目标

通过本集的学习,你将能够:

  • 理解异常的传播
  • 掌握异常处理模型
  • 学会资源管理
  • 理解错误处理策略

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 wrong

3. 异常处理模型

3.1 try-catch

try-catch(Java):
try {
    // 可能抛出异常的代码
} catch (ExceptionType1 e) {
    // 处理 ExceptionType1
} catch (ExceptionType2 e) {
    // 处理 ExceptionType2
} finally
« 上一篇 面向对象特性 下一篇 » 模块化与命名空间