получил ошибку позиционного аргумента при использовании декоратора в python - PullRequest
1 голос
/ 26 мая 2019

Я определил функцию декоратора в python, но при ее использовании я получаю ошибку позиционного аргумента. Это мой код:

def my_upper_case(func):

    def wrapper():
        return func().upper()

    return wrapper


@my_upper_case
def print_name(name):
    return name


if __name__ == "__main__":
    print(print_name("zeinab"))

Возвращенная ошибка:

Traceback (most recent call last):
  File "test.py", line 31, in <module>
    print(print_name("zeinab"))
TypeError: wrapper() takes no arguments (1 given)

Я попытался запустить код с python 2.7 и python 3.6. Оба вернули точную ошибку.

Ответы [ 2 ]

3 голосов
/ 26 мая 2019

Как говорит ошибка, ваша функция-обертка не принимает никаких аргументов.Он должен принимать те же аргументы, что и функция, которую он упаковывает.

def wrapper(arg):
    return func(arg).upper()
0 голосов
/ 26 мая 2019

wrapper оборачивает функцию, означая, что она будет «действовать на свое место».

Поэтому, если вы вызовете print_name("zeinab"), оболочка будет вызываться вместо wrapper("zeinab").

wrapper не принимает аргумент "zeinab", потому что вы не задали ему никаких параметров.

def my_upper_case(func):

    def wrapper(*args, **kwargs):
        return func(*args, **kwargs).upper()

    return wrapper


@my_upper_case
def print_name(name):
    return name


if __name__ == "__main__":
    print(print_name("zeinab"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...