Примените функцию и проверьте пользовательские исключения с помощью декораторов - PullRequest
1 голос
/ 16 июня 2020

Я хочу написать функцию, которая проверяет условие (с настраиваемыми исключениями), и если исключения не возникают, она применяет функцию и возвращает результат.

# Custom exceptions
class NegativeNumber(Exception):
    pass
class BigNumber(Exception):
    pass

def add_two(number):
    return number + 2

def apply_function(number, f):
    def check_condition(number, f):
        try:
            if number < 0:
                raise NegativeNumber
            if number > 10:
                raise BigNumber
        except NegativeNumber:
            return ("Negative Number")
        except BigNumber:
            return ("Big Number")
        return (f(number))
    return check_condition(number, f)


apply_function(5, add_two)

Можно ли лучше написать этот код с использованием декораторов?

1 Ответ

2 голосов
/ 16 июня 2020

Вы уже сделали большую часть этого. Я немного изменил имя вашей функции и структуру вашего кода. Это должно быть то, что вы ищете:

# Custom exceptions
class NegativeNumber(Exception):
    pass
class BigNumber(Exception):
    pass

def check_exceptions(f):
    def wrapped(number):
        try:
            if number < 0:
                raise NegativeNumber
            if number > 10:
                raise BigNumber
        except NegativeNumber:
            return "Negative Number"
        except BigNumber:
            return "Big Number"
        return f(number)
    return wrapped

@check_exceptions
def add_two(number):
    return number + 2

for num in (-1, 5, 15):
    print(add_two(num))

Вывод:

Negative Number
7
Big Number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...