首页 > 解决方案 > Python 在使用装饰器时在关闭时返回 None

问题描述

问题是如果第二个数字不为零,则内部函数返回 None 而不是产生输出!

为什么它不能充当普通的装饰器?

代码:

def check(fun):
    def inner_fun(a,b):
        if b == 0:
            print("0 is not valid")
            return
        fun(a,b)
    return inner_fun  #returns None

def divide(a,b):
    return a / b

divide = check(divide)

print(divide(5, 0))

输出: 0 is not valid None

标签: python-decoratorspython-3.7

解决方案


内部函数不会返回您期望的值,因为......它没有return。相反,它隐式返回 None,就像 Python 函数在到达控制流结束时所做的那样。

您可以编辑内部函数以f(a, b)在正常情况下返回:


def check(fun):
   def inner_fun(a,b):
        if b == 0:
            print("0 is not valid")
            return       # implicitly returns None
        return fun(a,b)  # note return
    return inner_fun

推荐阅读