Python возвращает None при закрытии при использовании декораторов - PullRequest
0 голосов
/ 01 февраля 2020

Проблема в том, что внутренняя функция возвращает None вместо результата, если второй di git не равен нулю!

Почему он не действует как обычный декоратор?

Код:

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

1 Ответ

0 голосов
/ 01 февраля 2020

Внутренняя функция не возвращает ожидаемое вами значение, потому что ... она не 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...