装饰器无法识别功能

时间:2021-03-03 05:54:48

标签: python

我使用 Flask.route() 装饰器有一段时间了,想自己写一个,但它总是告诉我函数没有传入它。

我已经完全复制了 Flask 示例中的所有内容,所以我的装饰器定义肯定是错误的:

def decorator(f, *d_args):
    def function(*args, **kwargs):
        print('I am decorated')
        return f(*args, **kwargs)

    return function


@decorator()
def test(a, b=1):
    print('Test', a, b)


test(1, 6)

我得到的错误:

Traceback (most recent call last):
  File "C:/Users/Tobi/Desktop/decorators.py", line 49, in <module>
    @decorator()
TypeError: decorator() missing 1 required positional argument: 'f'

1 个答案:

答案 0 :(得分:1)

首先,有关于处理这个问题的SO的问题。在编写新问题之前,您应该对此错误进行更多研究。但无论如何:

您的错误的原因是因为您通过在 def 之前编写它来调用装饰器 因为您已经使用方括号 decorator() 调用它而没有传入任何内容,它会抛出一个错误。

对于你的装饰器,正确的用法是:

@decorator # no brackets here
def function()
    ...