第二十三讲 python中自定义异常

目录

1.自定义异常

1.1 自定义异常的步骤

1.2 示例

2.使用 raise 语句抛出异常

2.1 基本用法

2.2 示例


1.自定义异常

在 Python 中,自定义异常通常是通过创建一个新的类来实现的,这个类继承自 Exception 类或其子类。这样,可以为你的异常提供更多的上下文信息,或者创建特定的错误类型以便更清晰地表达错误原因。

1.1 自定义异常的步骤

  • 创建异常类:定义一个新类,继承自 Exception 类。
  • 初始化异常信息:可以在自定义异常类中定义构造函数(__init__ 方法),以接受并存储额外的错误信息。
  • (可选)添加方法:可以定义额外的方法来处理异常相关的信息或逻辑。

1.2 示例

class CustomError(Exception):
    """自定义异常类"""
    def __init__(self, message, code=None):
        super().__init__(message)
        self.code = code

    def __str__(self):
        # 返回自定义的异常信息
        return f"{self.args[0]} (Code: {self.code})"

# 使用自定义异常
def divide(a, b):
    if b == 0:
        raise CustomError("不允许除以零", code=1001)
    return a / b

try:
    result = divide(10, 0)
except CustomError as e:
    print(f"发生错误: {e}")

打印结果

发生错误: 不允许除以零 (Code: 1001)

示例中:

  • CustomError 继承自 Exception 类,并扩展了初始化方法以接受错误信息和错误代码。
  • divide 函数在除数为零时引发 CustomError
  • 异常被捕获并处理,异常信息包括了自定义的错误代码。

2.使用 raise 语句抛出异常

raise 语句用于引发异常。可以使用 raise 来引发预定义的异常,也可以引发定义的异常。raise 语句可以单独使用,也可以与 try-except 语句结合使用来处理异常。

2.1 基本用法

  • 引发预定义异常:使用 raise 语句引发标准库中的异常。
  • 引发自定义异常:使用 raise 语句引发你自己定义的异常类。

2.2 示例

# 引发内置异常
def check_positive(value):
    if value <= 0:
        raise ValueError("值必须为正")


try:
    check_positive(-1)
except ValueError as e:
    print(f"错误: {e}")


# 引发自定义异常
class InvalidInputError(Exception):
    """自定义异常类"""
    pass


def validate_input(value):
    if not isinstance(value, int):
        raise InvalidInputError("输入必须是整数")


try:
    validate_input("string")
except InvalidInputError as e:
    print(f"自定义错误: {e}")

打印结果:

错误: 值必须为正
自定义错误: 输入必须是整数
  • check_positive 函数检查一个值是否为正数,如果不是,则引发 ValueError
  • validate_input 函数检查输入类型是否为整数,如果不是,则引发自定义的 InvalidInputError

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还是那个同伟伟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值