美文网首页
Python 封装异常处理装饰器

Python 封装异常处理装饰器

作者: 巨数 | 来源:发表于2020-02-04 19:50 被阅读0次

Python 封装异常处理装饰器

在写Python代码时,可能由于各种各样的意外bug导致程序出错,导致程序停止运行,因此我们常常会使用try...expect...表达式来捕获异常,并处理异常,可以使程序顺利执行下去。

但这样的做法也会有一定的缺陷,不利于程序的调试,Exception只会显示异常的原因信息,但具体在哪行代码出现了错误,它并未告诉我们,所以不利用程序的调试。

所以python的traceback包可以在异常中显示异常的原因信息,出现异常代码的行数都会打印出来。

同时,在每个函数中使用异常,可能会显得代码冗余,因此写了一个处理异常的装饰器。

功能

  • 显示执行代码后异常的具体时间
  • 显示异常的原因
  • 显示异常的具体函数
  • 打印出现异常的代码的具体位置、行数

代码

# -*- coding:UTF-8 -*-
# @Time    : 2020/1/30 12:51
# @Author  : Lemo
# @Email   : 2655543796@qq.com
# @File    : 装饰器.py
from datetime import datetime
import traceback
from functools import wraps

# 异常输出
def except_output(msg='异常'):
    # msg用于自定义函数的提示信息
    def except_execute(func):
        @wraps(func)
        def execept_print(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except Exception as e:
                sign = '=' * 60 + '\n'
                print(f'{sign}>>>异常时间:\t{datetime.now()}\n>>>异常函数:\t{func.__name__}\n>>>{msg}:\t{e}')
                print(f'{sign}{traceback.format_exc()}{sign}')
        return execept_print
    return except_execute

实例

@except_output('异常信息')
def lig(a = 5,b = 0):
    print(a/b)
lig()

输出

============================================================
>>>异常时间:    2020-02-04 19:36:48.937323
>>>异常函数:    lig
>>>异常信息:    division by zero
============================================================
Traceback (most recent call last):
  File "D:/Files/Documents/python/index/装饰器.py", line 17, in execept_print
    return func(*args, **kwargs)
  File "D:/Files/Documents/python/index/装饰器.py", line 30, in lig
    print(a/b)
ZeroDivisionError: division by zero
============================================================

相关文章

网友评论

      本文标题:Python 封装异常处理装饰器

      本文链接:https://www.haomeiwen.com/subject/potrxhtx.html