自定义异常
python内置异常类已经足够丰富,但有时不能满足我们的需求,就要自定义异常类。
内置异常类说明:
http://www.malaoshi.top/show_1EF2I6EXS38I.html
根据链接文章可知:常规异常的基类是Exception
例子
在本例中,实现登录功能,
- 当用户名不是admin时,提示用户名错误;
- 当密码不是123456时,提示密码错误;
- 当用户名不是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)
