You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的函数装饰器调用报错:'NoneType'对象不可调用?

解决装饰器导致的TypeError: 'NoneType' object is not callable错误

嘿,我一眼就瞅出问题啦!你遇到的这个TypeError: 'NoneType' object is not callable错误,根源十有八九是装饰器的返回语句缩进出错了——你大概率把return wrap写进了内部的wrap函数里,而不是放在外层decorate函数的末尾。

错误原因拆解

当你用@decorate语法装饰send_message时,Python会自动执行send_message = decorate(send_message)。如果decorate函数没有返回我们定义好的wrap函数,它就会默认返回None,这时候send_message就被赋值成了None,你再去调用它自然就会触发“无法调用NoneType对象”的错误。

修正后的完整代码

name = "Arthur"
message = "Hello!"
def decorate(func_to_decorate):
    def wrap(*args, **kwargs):
        print ("........................")
        func_to_decorate(*args, **kwargs)
        print ("........................")
    # 确保return语句属于外层的decorate函数
    return wrap

@decorate
def send_message(your_name="unassigned", your_message="blank"):
    print(your_name)
    print(your_message)

send_message(name, message)

额外的好习惯提示

虽然这次你的send_message函数没有返回值,但如果后续需要让原函数的返回值正常传递,建议在wrap函数里加上返回语句:

def wrap(*args, **kwargs):
    print ("........................")
    # 接收并返回原函数的执行结果
    result = func_to_decorate(*args, **kwargs)
    print ("........................")
    return result

内容的提问来源于stack exchange,提问作者Staxks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:05:58