为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2023-12-08 14:52:17
所以我很新,决定尝试装饰器,基本上它在显示名称之前添加“开始”,然后添加“结束”。非常简单,并且有效,但是我收到 NoneType 错误?def start_end_decorator(func):    def wrapper():        print("Start")        func()        print("End")    return wrapper()@start_end_decoratordef print_name():    print ('Nero')print_name()这是输出:line 13, in <module>    print_name()TypeError: 'NoneType' object is not callableStartNero我很困惑?我应该忽略它并尝试/例外吗?结尾
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

该函数wrapper中没有 return 语句,因此它返回None。因此 start_end_decorator() 中的这一行:

return wrapper()

返回None。您的意图肯定是返回函数,而不是函数的返回值。尝试将该语句更改为:

return wrapper


查看完整回答
反对 回复 2023-12-08
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

装饰器必须返回一个可调用对象。 start_end_decorator但是,正在返回 的返回值wrapper。由于wrapper没有return声明,None因此隐式返回。 None不是可调用对象,因此会出现错误。

你想要的是从你的装饰器返回wrapper而不是wrapper().


查看完整回答
反对 回复 2023-12-08
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

def start_end_decorator(func):


def wrapper(*args,**kwargs):

    print('start')

    

    result=func(*args,**kwargs)

    

    print('End')

    

    return result

return wrapper

@start_end_decorator

def add(x): print (x) return x+5


结果=添加(100)打印(结果)


O/P:开始 100 结束 105


查看完整回答
反对 回复 2023-12-08
  • 3 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信