Python自定义记录异常的修饰器
将每个方法中的 try...catch... 抽出来,写成一个修饰器,代码简单更容易维护
以下是无参修饰器:
```
from functools import wraps
def log_exception(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
print("[error in {}] message: {}\nargs:{}\nkwargs:{}"
.format(func.__name__, str(e), args, kwargs))
return None
return wrapper
```
以下是有参修饰器:
```
def log_exception(log_ua=False, error_return=None):
"""
Args:
log_ua(bool): 是否记录UA头信息。默认为False
error_return(object): 发生错误时返回的内容。默认为None
Returns:
发生错误时,返回None
Raises:
异常说明
"""
def decorate(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
logfile("[log_exception in func:{}] message: {}\nargs:{}\nkwargs:{}"
.format(func.__name__, str(e), args, kwargs))
if log_ua:
_log_ua()
# raise
return error_return
return wrapper
return decorate
```
在需要 try...catch... 的方法前加上,以有参修饰器为例:
```
@log_exception(log_ua=False, error_return=0)
def my_func():
...
```
如果func抛出异常,则返回 0
我的笔记