我创建了一个装饰器来打印它装饰的函数的名称,它的工作原理如下:
>>> def debug(func):
... msg=func.__qualname__
... def wrapper(*args, **kwargs):
... print(msg)
... return func(*args, **kwargs)
... return wrapper
...
>>> @debug
... def add(x, y):
... return x+y
...
>>> add(1,2)
add
3
现在我想将包装装饰器应用于包装器,但是当我这样做时,我得到了错误“TypeError:update_wrapper()得到了参数'wrapped'的多个值”
>>> from functools import wraps
>>>
>>> def debug(func):
... msg=func.__qualname__
... @wraps
... def wrapper(*args, **kwargs):
... print(msg)
... return func(*args, **kwargs)
... return wrapper
...
>>> @debug
... def add(x, y):
... return x+y
...
>>> add(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: update_wrapper() got multiple values for argument 'wrapped'
>>>
我做错了什么以及错误发生的原因?
得到它了。对不起,问题是我使用了错误的装饰作为装饰。这是正确的代码
def debug(func):
msg = func.__qualname__
@wraps(func)
def wrapper(*args, **kwargs):
print(msg)
return func(*args, **kwargs)
return wrapper