自定义异常处理 + yaml 多语言处理

1.多语言配置 yaml 文件,使用code 标识提示信息

  zh_CN: 
    10200: "成功" 
    10400: "错误" 
  en: 
    10200: "Success" 
    10400: "Error"

2.加载读取配置文件,根据code 和语言类型返回对应提示信息,cf.default_language() 是默认语言类型


with open(os.path.join(system_folder(__file__, 1), 'language.yaml'), 'r', encoding='utf-8') as f: 
        LANGUAGE = yaml.load(f, Loader=yaml.FullLoader)

def response_message(language, code=10200): 
    """ 
    根据语言标识 代码返回对应的 语言提示新 
    :param language: 语言标识 
    :param code: 提示代码 
    :return: 
    """ 
    if language is None: 
        language = cf.default_language() 
    message = LANGUAGE.get(language, None) 
    if message is None: 
        message = LANGUAGE[cf.default_language()] 
    if code in message.keys(): 
        msg_info = message[code] 
    else: 
        msg_info = code 
    return msg_info

3.自定义异常 需要继承 Exception类

class CodeException(Exception): 
    def __init__(self, e, *args, **kwargs): 
        super().__init__(args) 
        self.e = e 
        self.language = kwargs.get('language') 


    def __str__(self): 
        message = response_message(self.language, self.e) 
        return message 

    def response(self): 
        message = response_message(self.language, self.e) 
        return {'code': self.e, 'msg': message}

4.主动抛出异常 调用方式

def main(): 
    try: 
        # a = 0 
        # c = 10/a 
        raise CodeException('40008') 
    except CodeException as ce: 
        print(ce.e) 
        print(ce) 
        print(ce.response()) 
    except Exception as ex: 
        print(ex)
posted @ 2023-06-01 08:31  记不起的回忆  阅读(80)  评论(0)    收藏  举报