python自定义异常

自定义异常

python内置异常类已经足够丰富,但有时不能满足我们的需求,就要自定义异常类。

内置异常类说明:
http://www.malaoshi.top/show_1EF2I6EXS38I.html

根据链接文章可知:常规异常的基类是Exception

例子

在本例中,实现登录功能,

  1. 当用户名不是admin时,提示用户名错误;
  2. 当密码不是123456时,提示密码错误;
  3. 当用户名不是admin时,且密码不是123456时,提示用户名和密码错误;

这种情况,如果不用异常处理,而是用函数返回值表示错误类型,显得笨拙。

定义登录失败的异常类,在登录失败时,抛出异常,在异常中封装登录失败的原因

异常类

class LoginError(Exception):
    pass

登录的函数

def login(username,password):
    if username!='admin' :
        raise LoginError("用户名错误")
    elif password!='123456':
        raise LoginError("密码错误")
    elif username!='admin' and password!='123456':
        raise LoginError("用户名和密码错误")
    else:
        return True

用户交互

username=input("请输入用户名:")
password=input("请输入密码:")
try:
    b=login(username,password)
    if b :
        print("登录成功!")
except LoginError as e :
    print(e)

给自定义异常类增加属性

下图是微信公众号开发时,调用微信服务的错误返回值,有 返回码 ,有 说明 。

在编写接口时,这种有返回码、有说明的方式,是一种业界规范,就相当于手机充电口是Micro USB、Type-C 一样,是业界规范

图中网页链接:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234

将登录失败异常类增加返回码、说明属性

改造登录异常类

class LoginError(Exception):
    def __init__(self,code,msg):
        self.code=code
        self.msg=msg

改造交互代码

try:
    b=login("admin","12345678")
    if b :
        print("登录成功!")
except LoginError as e :
    print(e)
    print(e.code)
    print(e.msg)

原文出处:/show_1EF2KoDS2HNg.html