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
============================================================
网友评论