繁体   English   中英

在python中使用装饰器时出现位置参数错误

[英]got positional argument error when using decorator in python

我在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运行代码。 两者都返回了确切的错

正如错误所说,您的包装函数不接受任何参数。 它需要接受与它包装的函数相同的args。

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

wrapper包装函数,意味着它将“代替它”。

因此,如果调用print_name("zeinab") ,将使用wrapper("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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM