很多方法都写在一个类里。我们又可能需要一个通用的装饰器,比如,要给某个底层类的方法打桩,查看入参和出参,用以理解业务;或者要hold住所有的执行错误,打印堆栈又不想程序退出或用例直接失败
比如捕捉错误的装饰器
import traceback
from functools import wraps
def trier(soft=False):
'''
:param bool soft: 为True时,打印报错堆栈并忽略异常。默认False,打印报错堆栈并抛出异常
:return:
如果要给类方法、静态方法装饰,则该装饰器必须处于比@staticmethod装饰器更内一层才行
'''
def realTrier(func):
'''
:param function func:
:return:
'''
@wraps(func) # 保留__name__ __doc__ __module__
def innerfunc(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception, e:
try:
print(traceback.format_exc())
except:
print e
if not soft:
raise
return innerfunc
return realTrier
</