猿问

程序可以运行,但我仍然收到 NoneType 错误 Python Decorators

所以我很新,决定尝试装饰器,基本上它在显示名称之前添加“开始”,然后添加“结束”。非常简单,并且有效,但是我收到 NoneType 错误?


def start_end_decorator(func):


    def wrapper():

        print("Start")

        func()

        print("End")

    return wrapper()


@start_end_decorator

def print_name():

    print ('Nero')


print_name()

这是输出:


line 13, in <module>

    print_name()

TypeError: 'NoneType' object is not callable

Start

Nero

我很困惑?我应该忽略它并尝试/例外吗?结尾


慕田峪9158850
浏览 140回答 3
3回答

忽然笑

该函数wrapper中没有 return 语句,因此它返回None。因此 start_end_decorator() 中的这一行:return&nbsp;wrapper()返回None。您的意图肯定是返回函数,而不是函数的返回值。尝试将该语句更改为:return&nbsp;wrapper

阿波罗的战车

装饰器必须返回一个可调用对象。&nbsp;start_end_decorator但是,正在返回 的返回值wrapper。由于wrapper没有return声明,None因此隐式返回。&nbsp;None不是可调用对象,因此会出现错误。你想要的是从你的装饰器返回wrapper而不是wrapper().

慕桂英3389331

def start_end_decorator(func):def wrapper(*args,**kwargs):&nbsp; &nbsp; print('start')&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; result=func(*args,**kwargs)&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; print('End')&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return resultreturn wrapper@start_end_decoratordef add(x): print (x) return x+5结果=添加(100)打印(结果)O/P:开始 100 结束 105
随时随地看视频慕课网APP

相关分类

Python
我要回答