【问题标题】:Why is the following code giving an error-"Error: 'NoneType' object is not callable"?为什么以下代码会给出错误-“错误:'NoneType' 对象不可调用”?
【发布时间】:2020-08-19 15:11:00
【问题描述】:

我试图在 python 中实现装饰器,但在第 14 行出现错误,即hello()

    #The code-
    def maint(item1):
        def greet():
            print("Good Morning") 
            item1()
            print("Tanish")
        return greet()

    #decorator----
    @maint 
    def hello():
        print("Hello")
    # hello=maint(hello)
    hello()

我做错了什么?

【问题讨论】:

  • 哪一行导致错误?
  • return greet() 应该是return greet?否则,在您注释掉的示例中(装饰器也是如此)hello=maint(hello)maint 将返回来自greet 的输出,即None,因此您将函数hello 替换为不是None一个函数。

标签: python python-decorators


【解决方案1】:
return greet()

在装饰器中,您调用greet()返回其结果。由于greet() 没有显式返回,因此结果为None。这将有助于意识到装饰器是这样的简写语法:

def hello():
   pass

hello = maint(hello)

注意 hello 如何被重新分配给 maint() 返回的任何内容。在您的情况下,hello 被重新分配给 None。所以调用hello() 会导致错误。

要解决这个问题,只需 return greet 不带括号。装饰器总是返回一个函数。他们不应该调用那个函数。

【讨论】:

  • 感谢您的帮助! :)
  • @TanishSarmah 如果您觉得有帮助,请单击我的答案旁边的复选标记以接受它。
猜你喜欢
  • 1970-01-01
  • 2015-12-13
  • 2011-12-13
  • 2016-09-11
  • 2014-10-09
  • 2018-12-03
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多