from abc import *
# 思路:遇到异常后、从异常字典匹配异常,匹配到了:调用匹配到的异常处理函数进行结果处理
# 没匹配到,注册一个异常子类
# key: 异常类型 value:msg
exist_exception_dict = {'Nobody': 'BodyNoneFunc','BodyNotJson':"BodyNotJsonFunc"}
# 自定义异常类
class MyException(Exception):
def __init__(self, msg=''):
self.msg = msg
def BodyNoneFunc(self):
print('没有body体应该做哪些操作。。。')
def BodyNotJsonFunc(self):
print('body不是json格式应该做哪些操作。。。')
def UserDefineException(name, msg=''):
if name in exist_exception_dict:
print('有该异常类 执行异常')
getattr(MyException(),exist_exception_dict[name])()
else:
# 没有该异常
# 1.添加到异常字典
exist_exception_dict[name] = msg
class_dict = {'msg': msg}
# 2. 创建异常子类,并继承MyException
setattr(MyException, name, '')
type(name, (MyException,), class_dict)
print('MyException所有子类', MyException.__subclasses__())
import json
def JsonDecodeErrorFun():
print('必须是json格式 JsonDecodeErrorFunc')
exceptionPool = {
json.JSONDecodeError:JsonDecodeErrorFun,
}
def Do(fn,*params):
try:
fn(*params)
print('0没异常')
return True
except Exception as e:
print('有异常',e)
if e in exceptionPool:
print('在异常池')
return exceptionPool[e]()
print('不在异常池')
return False
Do(json.loads,111)
# 使用
from kunpengException import UserDefineException,exist_exception_dict, MyException
import json
body = 123
try:
UserDefineException('BodyNotJson1', 'body体必须是json') # para: 异常类名,msg
print(2222,MyException.__subclasses__())
json.loads(body)
print('BodyNotJson' in 1)
print(111111,type(MyException.__dict__))
raise kunpengException.BodyNotJson1
except kunpengException.BodyNotJson1 as e:
print(e)
print('\n except_dict 字典:', exist_exception_dict)
# 使用
from kunpengException import UserDefineException, exist_exception_dict
body = {}
if not body:
UserDefineException('Nobody11','body不能为空')# para: 异常类名,msg
print('\n except_dict 字典:',exist_exception_dict )