Wraps 在装饰器中使用时会出现 TypeError

ama*_*ain 5 python python-3.x python-decorators

我创建了一个装饰器来打印它所装饰的函数的名称并且它可以工作:

>>> 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
Run Code Online (Sandbox Code Playgroud)

现在我想将 wraps 装饰器应用于包装器,但是当我这样做时,我收到错误“TypeError: update_wrapper() got multiple values for argument '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'
>>>
Run Code Online (Sandbox Code Playgroud)

我做错了什么以及为什么会发生错误?

ama*_*ain 5

知道了。抱歉,问题是我错误地将包装用作装饰器。这是正确的代码

def debug(func):
   msg = func.__qualname__
   @wraps(func)
   def wrapper(*args, **kwargs):
      print(msg)
      return func(*args, **kwargs)
   return wrapper
Run Code Online (Sandbox Code Playgroud)