Python异常处理完全指南

Jun 11, 2025·
Orochi
Orochi
· 1 min read

Python异常处理机制详解

1. 标准异常体系

Python提供了丰富的内置异常类型,形成了一个完整的异常层次结构:

基础异常类

  • BaseException: 所有异常的基类
  • Exception: 常规错误的基类
  • StandardError: 内建标准异常的基类

常见异常类型

# 系统相关
SystemExit          # 解释器请求退出
KeyboardInterrupt   # 用户中断执行(通常是输入^C)
MemoryError        # 内存溢出错误

# 语法和名称相关
SyntaxError        # Python语法错误
IndentationError   # 缩进错误
NameError          # 未声明/初始化对象
AttributeError     # 对象没有这个属性

# 类型和值相关
TypeError          # 对类型无效的操作
ValueError         # 传入无效的参数
AssertionError     # 断言语句失败

# 运算相关
ArithmeticError    # 数值计算错误的基类
ZeroDivisionError  # 除(或取模)零错误
OverflowError      # 数值运算超出最大限制

# IO相关
IOError           # 输入/输出操作失败
OSError           # 操作系统错误
FileNotFoundError # 文件未找到错误

# 其他常见异常
ImportError       # 导入模块/对象失败
KeyError          # 字典中查找一个不存在的关键字
IndexError        # 序列中没有此索引
RuntimeError      # 一般的运行时错误

2. 异常处理语法

基本try-except结构

try:
    # 可能产生异常的代码
    result = 1 / 0
except ZeroDivisionError as e:
    # 处理特定异常
    print(f"除零错误: {e}")
except Exception as e:
    # 处理其他异常
    print(f"其他错误: {e}")
else:
    # 没有异常时执行
    print("操作成功")
finally:
    # 无论是否有异常都会执行
    print("清理工作")

多异常捕获

try:
    # 可能产生多种异常的代码
    pass
except (TypeError, ValueError) as e:
    # 处理多个异常
    print(f"类型或值错误: {e}")

3. 实际应用示例

文件操作异常处理

try:
    with open("testfile", "w") as fh:
        fh.write("这是一个测试文件,用于测试异常!!")
except IOError as e:
    print(f"文件操作错误: {e}")
else:
    print("文件写入成功")

网络请求异常处理

import requests

try:
    response = requests.get("http://example.com")
    response.raise_for_status()
except requests.RequestException as e:
    print(f"网络请求错误: {e}")

4. 最佳实践建议

  1. 异常捕获原则

    • 只捕获预期的异常
    • 避免捕获所有异常(except:)
    • 保持异常处理代码简洁
  2. 异常处理策略

    • 在适当的层级处理异常
    • 记录异常信息
    • 保持程序状态一致性
  3. 使用上下文管理器

    • 优先使用with语句
    • 自动处理资源清理
    • 确保异常时资源正确释放

5. 调试技巧

  1. 使用logging记录异常
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

try:
    # 可能出错的代码
    pass
except Exception as e:
    logger.exception("发生错误")
  1. 自定义异常
class CustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

常见问题解决

  1. 文件操作错误:使用with语句自动关闭
  2. 网络请求超时:设置适当的超时时间
  3. 数据库连接异常:实现重试机制
  4. 资源清理:使用finally确保释放
Orochi
Authors
充满活力和热情的软件从业者
在不同的公司和项目中工作过,担任过各种职务,做过各类项目(如企业站点、内部中台、边缘设备服务、客户端开发、大模型训练、大模型适配和任务调度等等),广泛的视野和经验.