021. 定义一个自定义异常,并在特定条件下抛出

在 Python 中,可以通过继承内置的 Exception 类来定义自定义异常。自定义异常可以让你更精确地描述程序中的错误情况,并在特定条件下抛出这些异常。以下是如何定义一个自定义异常并在特定条件下抛出它的示例代码。

步骤 1:定义自定义异常

自定义异常类通常继承自 Exception 类,并可以包含额外的初始化参数和方法。

# 定义一个自定义异常类
class MyCustomError(Exception):
    def __init__(self, message="这是一个自定义异常"):
        # 调用父类的初始化方法
        super().__init__(message)

步骤 2:在特定条件下抛出自定义异常

在代码中,可以通过 raise 语句抛出自定义异常。以下是一个示例,展示如何在特定条件下抛出自定义异常。

# 定义一个函数,检查输入的值是否为正数
def check_positive(value):
    if value <= 0:
        # 如果值不是正数,抛出自定义异常
        raise MyCustomError(f"输入的值 {value} 不是正数!")
    else:
        print(f"输入的值 {value} 是正数。")

# 测试代码
try:
    # 测试一个正数
    check_positive(10)

    # 测试一个非正数
    check_positive(-5)
except MyCustomError as e:
    # 捕获并处理自定义异常
    print("捕获到自定义异常:", e)

运行结果

运行上述代码后,输出如下:

输入的值 10 是正数。
捕获到自定义异常: 输入的值 -5 不是正数!

代码解释

定义自定义异常类

  • 使用 class MyCustomError(Exception) 定义一个名为 MyCustomError 的自定义异常类。

  • __init__ 方法中,调用父类的 __init__ 方法,并传递一个默认的错误消息。

定义检查函数

  • 定义一个函数 check_positive,接受一个参数 value

  • 如果 value 不是正数(即 value <= 0),使用 raise 语句抛出自定义异常 MyCustomError,并传递一个具体的错误消息。

测试代码

  • 使用 try 块调用 check_positive 函数,分别测试一个正数和一个非正数。

  • 使用 except 块捕获并处理抛出的 MyCustomError 异常。

扩展:自定义异常的更多功能

自定义异常类可以包含更多的功能,例如:

  • 添加额外的属性来存储错误的详细信息。

  • 定义额外的方法来处理错误。

# 定义一个更复杂的自定义异常类
class MyCustomError(Exception):
    def __init__(self, value, message="这是一个自定义异常"):
        self.value = value  # 保存触发异常的值
        self.message = message  # 保存错误消息
        super().__init__(f"{message}: {value}")

    def __str__(self):
        return f"错误值:{self.value},错误消息:{self.message}"

然后在代码中使用这个更复杂的自定义异常:

# 定义一个函数,检查输入的值是否为正数
def check_positive(value):
    if value <= 0:
        # 如果值不是正数,抛出自定义异常
        raise MyCustomError(value, f"输入的值 {value} 不是正数!")
    else:
        print(f"输入的值 {value} 是正数。")

# 测试代码
try:
    check_positive(-5)
except MyCustomError as e:
    print("捕获到自定义异常:", e)

运行结果

运行上述代码后,输出如下:

捕获到自定义异常: 错误值:-5,错误消息:输入的值 -5 不是正数!

总结

通过定义自定义异常类并使用 raise 语句抛出异常,可以在特定条件下处理程序中的错误情况。自定义异常类可以包含额外的属性和方法,以提供更丰富的错误信息和处理逻辑。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)