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

使用Python装饰器后函数返回None的原因咨询

问题原因与解决办法

你的代码里,装饰器的inner函数在else分支犯了一个小错误:虽然调用了原函数func(a, b),但没有把这个调用的返回值传递出去。Python里如果函数没有显式写return语句,默认会返回None,这就是num(3, 1)返回None的根本原因。

拆开来具体看:

  • 当a <= b时(比如num(3,5)),inner函数里有return c,所以能正常返回计算后的值;
  • 当a > b时(比如num(3,1)),进入else分支,执行了原num函数(能打印出结果),但inner函数本身没返回任何值,所以最终输出None。

修复方法很简单,给else分支里的原函数调用加上return就行,修改后的代码如下:

def decor(func):
    def inner(a, b):
        if a <= b:
            print("If executed")
            a, b = b, a
            c = a - b
            print(c)
            return c
        else:
            print("else executed")
            return func(a, b)  # 新增return,把原函数的返回值传递出去
    return inner


def num(a, b):
    print("Function executed")
    d = (a - b)
    print(d)
    return d


num = decor(num)

print(num(3, 5))  # 返回2
print(num(3, 1))  # 现在正常返回2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:10:41