Python异常处理完全指南 - 来自Python Cheatsheet项目

Python异常处理完全指南 - 来自Python Cheatsheet项目

python-cheatsheet All-inclusive Python cheatsheet python-cheatsheet 项目地址: https://gitcode.com/gh_mirrors/pyt/python-cheatsheet

异常处理概述

在Python编程中,异常处理是应对程序运行时错误的关键机制。当程序遇到意外情况时(如除以零、文件不存在等),Python会抛出异常。如果不处理这些异常,程序会立即终止执行。

异常处理的核心思想是"预防胜于治疗"——通过合理的异常处理,我们可以:

  1. 防止程序意外崩溃
  2. 提供有意义的错误信息
  3. 在错误发生时执行必要的清理工作
  4. 实现更健壮的代码逻辑

基础异常处理

让我们从一个简单的除法函数开始,看看如何处理除零异常:

def divide(dividend, divisor):
    try:
        print(dividend / divisor)
    except ZeroDivisionError:
        print('除数不能为零')

在这个例子中:

  • try块包含可能引发异常的代码
  • except块捕获特定异常并处理
  • ZeroDivisionError是Python内置的除零异常类型

处理多种异常

实际开发中,一个代码块可能抛出多种异常。Python允许我们同时捕获多种异常:

def process_file(filename):
    try:
        with open(filename) as f:
            content = f.read()
            number = int(content)
    except (FileNotFoundError, ValueError) as e:
        print(f"处理文件时出错: {str(e)}")

这种方式的优点:

  1. 代码更简洁,避免多个except块
  2. 相关异常可以统一处理
  3. 使用as e可以获取异常对象,提取错误信息

finally子句的妙用

finally块中的代码无论是否发生异常都会执行,非常适合用于资源清理:

def database_operation():
    conn = None
    try:
        conn = connect_to_database()
        # 执行数据库操作
    except DatabaseError as e:
        print(f"数据库错误: {e}")
    finally:
        if conn:  # 确保连接被关闭
            conn.close()
        print("数据库操作完成")

finally的典型应用场景:

  • 关闭文件句柄
  • 释放数据库连接
  • 释放网络资源
  • 执行必要的清理操作

自定义异常

当内置异常无法满足需求时,我们可以创建自定义异常:

class InvalidAgeError(Exception):
    """年龄无效异常"""
    def __init__(self, age, message="年龄必须在0-120之间"):
        self.age = age
        self.message = message
        super().__init__(self.message)

def set_age(age):
    if not 0 <= age <= 120:
        raise InvalidAgeError(age)
    print(f"年龄设置为: {age}")

自定义异常的最佳实践:

  1. 继承自基础Exception类
  2. 命名以"Error"结尾
  3. 可以提供有意义的默认错误信息
  4. 可以携带额外的错误上下文信息

异常处理的高级技巧

异常链

Python 3引入了异常链机制,可以保留原始异常信息:

try:
    # 可能抛出异常的代码
except SomeError as e:
    raise CustomError("附加信息") from e

上下文管理器与异常处理

结合with语句可以更优雅地处理资源:

with open('file.txt') as f:
    content = f.read()

即使f.read()抛出异常,文件也会自动关闭。

日志记录与异常

生产环境中,应该记录异常而不仅仅是打印:

import logging

try:
    risky_operation()
except Exception as e:
    logging.exception("操作失败")

异常处理的最佳实践

  1. 具体优于宽泛:捕获特定异常而非所有异常
  2. 避免空的except块:至少要记录错误
  3. 保持try块精简:只包含可能抛出异常的代码
  4. 合理使用finally:确保资源释放
  5. 提供有意义的错误信息:帮助调试和用户理解

总结

Python的异常处理机制提供了强大的错误管理能力。通过合理使用try/except/finally结构、创建自定义异常以及遵循最佳实践,可以编写出更健壮、更易维护的Python代码。记住,良好的异常处理不仅能防止程序崩溃,还能提供清晰的错误诊断信息,是专业Python开发的重要技能。

python-cheatsheet All-inclusive Python cheatsheet python-cheatsheet 项目地址: https://gitcode.com/gh_mirrors/pyt/python-cheatsheet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左萱莉Maude

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值