python异常:综合案例-自定义异常、处理多个异常

案例介绍

是登录函数,需要输入 用户名、密码,如果用户名不是 admin,提示 用户名不存在,请重新输入用户名
如果用户名是 admin,密码不是 123456,提示 密码不正确,请重新输入密码

实现一(有瑕疵)

def login(username,password):
    if username == 'admin':
        if password == "123456":
            return True
        else:
            raise Exception("密码不正确!")
    else:
        raise Exception("用户名不存在!")

调用测试:

try:
    # login("lilei","111")
    login("admin","111")
except Exception as e:
    print("异常信息:",e)
    print("请重新输入用户名")

执行结果:

异常信息: 密码不正确!
请重新输入用户名               # 该提示与上一行不符合逻辑

缺点

类似请假,如果只是请假,老师不能分类,无法解决到底是给假还是不给假:

  • 如果请大病假,就给假
  • 如果请小病假,如:感冒,就不给假

所以为了更好决定是否给假,所以要将请假分类

同理:为了更好的处理异常,也要分类,即:定义异常子类

实现二(改进)

用户名不存在的异常类:

class UsernameNotExistError( Exception ):
    """
    用户名不存在
    """
    pass

密码错误的异常类:

class PasswordError (Exception):
    '''
    密码错误
    '''
    pass

登录函数:

def login(username,password):
    '''
    假设用户名必须是 admin,密码必须是123456
    '''
    if username != 'admin':
        raise UsernameNotExistError("用户名不存在!")
    else:
        if password != '123456':
            raise PasswordError("密码不正确!")
        else:
            return True

测试执行:

try:
    # res = login("lilei","111111")
    res = login("admin","111111")
    print("登录结果:" , res)
except UsernameNotExistError as ue:
    print("异常信息:",ue)
    print("请重新输入用户名!")

except PasswordError as pe:
    print("异常信息:",pe)
    print("请重新输入密码!")

原文出处:/show_1IX5XjeVsdeY.html