← 目录操作 | PyPDF2 →

异常处理

良好的异常处理让程序健壮,而非裸奔。

try/except 核心用法

# 基本结构
try:
    risky_operation()
except SomeError:
    handle_error()

# 捕获具体异常
try:
    x = int(user_input)
except ValueError:
    print("输入无效")

# 捕获多个异常
try:
    data = json.loads(raw)
except (ValueError, KeyError) as e:
    print(f"解析失败: {e}")

# 捕获所有异常(慎用)
try:
    do_something()
except Exception as e:
    print(f"未知错误: {e}")

else 和 finally

# else: 仅在无异常时执行
try:
    result = divide(a, b)
except ZeroDivisionError:
    print("除零错误")
else:
    print(f"结果: {result}")  # 仅无异常时执行

# finally: 无论怎样都执行(资源清理)
try:
    f = open("file.txt")
    data = f.read()
finally:
    f.close()  # 总是执行

raise 抛出异常

# 主动抛出异常
def validate_age(age):
    if age < 0:
        raise ValueError("年龄不能为负")
    if age > 150:
        raise ValueError("年龄超出合理范围")
    return age

# 重新抛出异常
try:
    validate_age(200)
except ValueError:
    log_error()
    raise  # 重新抛出

自定义异常

# 定义业务异常
class APIError(Exception):
    def __init__(self, code, message):
        self.code = code
        super().__init__(message)

# 使用
raise APIError(404, "资源不存在")

上下文管理器 (推荐)

# 自动资源管理,finally 都不需要写
with open("file.txt") as f:
    data = f.read()
# 文件自动关闭

# 多个资源
with open("a.txt") as f1, open("b.txt") as f2:
    pass
⚠️ 最佳实践:不要用 except Exception 捕获所有异常,让具体异常传播;只在能正确处理时才捕获。
← 目录操作 | PyPDF2 →