【无为则无心&Python基础】— 51、Python中自定义异常

在Python中,抛出自定义异常的语法为raise 异常类对象。也就是说可以使用 raise语句来抛出异常, raise语句后需要跟一个异常类 或 异常类的实例。

1、使用 raise语句来抛出异常

需求:定义一个求和方法

抛出异常类
def add(a, b):
    # 如果a和b中有负数,就向调用处抛出异常
    if a < 0 or b < 0:
        # raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例
        # 此时返回一个异常类
        raise Exception
    # 正常计算并返回结果
    r = a + b
    return r


print(add(-123, 456))

结果如下图:可以看到没有异常描述信息
在这里插入图片描述

抛出异常类的实例
def add(a, b):
    # 如果a和b中有负数,就向调用处抛出异常
    if a < 0 or b < 0:
        # raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例
        # 此时返回一个异常类的实例
        raise Exception("传入的参数不能有负数。")
    # 正常计算并返回结果
    r = a + b
    return r


print(add(-123, 456))

结果如下图:
在这里插入图片描述

2、自定义异常类

自定义异常类,只需要创建一个类继承Exception即可。

简单实现
# 自定义异常类,只需要创建一个类继承Exception即可
# 自定义异常类完全不用写任何内容
class MyError(Exception):
    pass

def add(a, b):
    # 如果a和b中有负数,就向调用处抛出异常
    if a < 0 or b < 0:
        # raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例
        # 此时返回一个异常类的实例
        raise MyError("传入的参数不能有负数。自定义的,这样也行!")
    # 正常计算并返回结果
    r = a + b
    return r


print(add(-123, 456))

结果如下图:
在这里插入图片描述

完整实现

需求:密码长度不足,则报异常(用户输入密码,如果输入的长度不足3位,则报错,即抛出自定义异常,并捕获该异常)。

# 自定义异常类,继承Exception
class ShortInputError(Exception):
    def __init__(self, length, min_len):
        # 用户输入的密码长度
        self.length = length
        # 系统要求的最少长度
        self.min_len = min_len

    # 设置抛出异常的描述信息
    def __str__(self):
        return f'你输入的长度是{self.length}, 不能少于{self.min_len}个字符'


def main():
    # 2. 抛出异常: 尝试执行:用户输入密码,如果长度小于3,抛出异常
    try:
        con = input('请输入密码:')
        if len(con) < 3:
            # 抛出异常类创建的对象
            raise ShortInputError(len(con), 3)
    # 3. 捕获该异常
    except Exception as result:
        print(result)
    else:
        print('密码已经输入完成')


main()

版权声明:本文为Liuyuelinjiayou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。