簡體   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