9、错误与异常处理

书诚小驿2025/03/08Python知识库Python

1. 异常处理基础

Python使用tryexceptelsefinally语句来处理异常。基本语法结构如下:

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

2. 常见异常类型

# TypeError - 类型错误
try:
    result = "42" + 42
except TypeError as e:
    print(f"类型错误: {e}")

# ValueError - 值错误
try:
    num = int("abc")
except ValueError as e:
    print(f"值错误: {e}")

# FileNotFoundError - 文件未找到
try:
    with open("不存在的文件.txt", "r") as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"文件未找到: {e}")

3. 自定义异常

class CustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

# 使用自定义异常
try:
    raise CustomError("这是一个自定义错误")
except CustomError as e:
    print(f"捕获自定义异常: {e}")

4. 异常链(Python 3.x)

try:
    try:
        result = 1 / 0
    except ZeroDivisionError as e:
        raise ValueError("无效的操作") from e
except ValueError as e:
    print(f"错误信息: {e}")
    print(f"原始错误: {e.__cause__}")

5. with语句和上下文管理

# 自动处理文件关闭
with open("example.txt", "w") as file:
    file.write("Hello, World!")
# 文件会自动关闭,即使发生异常

6. 最佳实践

  1. 总是捕获具体的异常,而不是笼统的Exception
  2. except块中提供有意义的错误信息
  3. 使用finally块进行清理工作
  4. 避免在except块中使用空pass语句
  5. 合理使用异常层级,不要过度嵌套
最后更新时间' 2025/4/8 08:06:09