python 通过装饰器 实现try except 异常捕捉

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# __DATE__:2023/5/12
from loguru import logger
from functools import wraps
import traceback

logger.add(
    '../log/{time:YYYY-MM-DD}.log',  # 日志文件路径及日志文件名格式:2023-01-30.log
    rotation='00:00',  # 每天00:00 自动生成新的日志文件
    retention='30 day', mode='a+',  # 保留多久的日志文件
    backtrace=True, diagnose=True,  # 记录完整的错误信息
    encoding='utf-8',  # 日志文件编码
    enqueue=True,
)


# 定义装饰器error_handler
def error_handler(func):
    @wraps(func)  # 关键行, 旨在消除装饰器对原函数造成的影响,即对原函数的相关属性进行拷贝,已达到装饰器不修改原函数的目的。
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except:
            msg = traceback.format_exc()
            logger.error(msg)
            return f'error: {msg}'

    return wrapper  # 返回函数名


@error_handler
def fun_1():
    a = 1 / 0
    return a


if __name__ == '__main__':
    res = fun_1()
    print("返回结果:", res)
D:\Anaconda3\envs\fastapi\python.exe F:/WorkCode/AlgorithmServer/utils/error_log.py
返回结果: error: Traceback (most recent call last):
  File "F:/WorkCode/AlgorithmServer/utils/error_log.py", line 23, in wrapper
    return func(*args, **kwargs)
  File "F:/WorkCode/AlgorithmServer/utils/error_log.py", line 32, in fun_1
    a = 1/0
ZeroDivisionError: division by zero

2023-05-12 16:05:28.480 | ERROR    | __main__:wrapper:26 - Traceback (most recent call last):
  File "F:/WorkCode/AlgorithmServer/utils/error_log.py", line 23, in wrapper
    return func(*args, **kwargs)
  File "F:/WorkCode/AlgorithmServer/utils/error_log.py", line 32, in fun_1
    a = 1/0
ZeroDivisionError: division by zero


Process finished with exit code 0

参考自:用Python装饰器给函数自动加上try except

解决多次写try  except  的繁琐,直接import 装饰器即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值