很多方法都写在一个类里。我们又可能需要一个通用的装饰器,比如,要给某个底层类的方法打桩,查看入参和出参,用以理解业务;或者要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
</