首页 > 解决方案 > 使用包装的 Python 装饰器,但名称仍会更改

问题描述

我有以下错误处理程序(实际上是绕过程序)装饰器 -

import functools

def exception_safe(*args):
        ErrList = tuple(args)
        def decorator(f):
                @functools.wraps(f)
                def wrapper(*args, **kwargs):
                        if ErrList:
                                try:
                                        result = f(*args, **kwargs)
                                        print(f'No error!')
                                        return result 
                                except ErrList as err:
                                        print(f'got error!')
                        else:
                                try:
                                        result = f(*args, **kwargs)
                                        print(f'No error!')
                                        return result 
                                except Exception as err:
                                        print(f'got error!')
                return wrapper
        return decorator

即使我仍然从我的 pytests 中得到下一个断言错误,告诉我函数名称是“装饰器”:

pytest 堆栈

这可能是什么原因?我真的尝试了一切..

标签: pythondecorator

解决方案


exception_safe需要给出参数,即使没有:

@exception_safe()
def function():

推荐阅读