如何解决程序可以工作,但是我仍然收到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
我很困惑?我是否应该尝试/除外而忽略它? 结束
解决方法
函数wrapper
中没有return语句,因此它返回None
。因此,start_end_decorator()中的这一行:
return wrapper()
返回None
。您的意图肯定是返回函数,而不是函数的返回值。尝试将该语句更改为此:
return wrapper
,
装饰器必须返回可调用对象。但是,start_end_decorator
返回的返回值是wrapper
。由于wrapper
没有return
语句,因此None
被隐式返回。 None
不是可调用对象,因此是错误。
您想要的是从装饰器返回wrapper
而不是wrapper()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。