Python 中 raise 关键字用于主动引发异常

在 Python 中,raise 关键字用于主动引发异常。你可以直接引发内置异常,或通过继承 Exception 类创建自定义异常。以下是详细说明和示例:


1. 基本用法

引发内置异常(如 ValueError):

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为零")  # 引发异常并附带错误信息
    return a / b

try:
    result = divide(10, 0)
except ValueError as e:
    print(f"捕获到异常: {e}")  # 输出: 捕获到异常: 除数不能为零

2. 重新引发当前异常

except 块中,使用 raise 不带参数可重新引发当前异常:

try:
    x = int("invalid")
except ValueError:
    print("转换失败")
    raise  # 重新引发 ValueError

3. 引发自定义异常

通过继承 Exception 创建自定义异常:

class MyCustomError(Exception):
    pass

def check_positive(value):
    if value < 0:
        raise MyCustomError("值不能为负数")

try:
    check_positive(-1)
except MyCustomError as e:
    print(f"自定义异常: {e}")  # 输出: 自定义异常: 值不能为负数

4. 引发异常并附带链式调用

Python 3 支持通过 from 指定异常链:

try:
    file = open("missing.txt")
except FileNotFoundError as e:
    raise RuntimeError("文件操作失败") from e  # 保留原始异常上下文

5. 引发多种异常类型

可以引发任何继承自 BaseException 的类:

raise TypeError("类型错误")  # 内置异常
raise SystemExit(1)        # 系统退出(不推荐随意使用)

关键点总结

  • 用途:主动通知调用者错误情况,替代返回错误码。
  • 异常对象:可以是内置异常或自定义异常(继承 Exception)。
  • 错误信息:建议通过字符串参数提供清晰描述。
  • 异常链:用 raise ... from ... 保留上下文。

常见内置异常

异常类型 触发场景
ValueError 值不合法(如 int("abc")
IndexError 序列索引越界
KeyError 字典键不存在
FileNotFoundError 文件未找到

通过合理使用 raise,可以提升代码的健壮性和可调试性。

posted @ 2025-07-28 11:47  nxhujiee  阅读(25)  评论(0)    收藏  举报