1. 无参数的装饰器
def exception_wrapper(func):
def wrapper(*args, **kwargs):
try:
r = func(*args, **kwargs)
except Exception as e:
print(e)
return r
return wrapper
使用
@exception_wrapper
def hello():
print("ni hao")
2. 有参数的装饰器
import functools
import time
import json
def timer(event='', comment=''):
def _timer(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
r = func(*args, **kwargs)
end_time = time.time()
try:
message = json.dumps({
"func": func.__name__,
"timecost": end_time - start_time,
"event": event,
"comment": comment,
})
print(message)
except Exception as e:
pass
return r
return wrapper
return _timer
使用
@timer() # 虽然没有参数,但是必须写括号
def hello():
print("Ni hao")