Python 应用一个函数并使用装饰器检查自定义异常

Python 应用一个函数并使用装饰器检查自定义异常,python,python-3.x,python-decorators,Python,Python 3.x,Python Decorators,我想写一个函数来检查一个条件(带有自定义异常),如果没有引发异常,它将应用一个函数并返回结果 # 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(numb

我想写一个函数来检查一个条件(带有自定义异常),如果没有引发异常,它将应用一个函数并返回结果

# 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)
#自定义异常
类枚举器(异常):
通过
类BigNumber(例外):
通过
def添加_2(编号):
返回号码+2
def应用_功能(数字,f):
def检查_条件(编号,f):
尝试:
如果数字<0:
举出负数
如果数字>10:
大数
除负数外:
返回(“负数”)
除BigNumber外:
返回(“大数字”)
报税表(f(编号))
返回检查条件(编号,f)
应用_函数(5,添加_2)

使用decorators可以更好地编写此代码吗?

您已经完成了大部分工作。我稍微修改了函数名和代码结构。这应该是您正在寻找的:

# 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))
#自定义异常
类枚举器(异常):
通过
类BigNumber(例外):
通过
def检查_异常(f):
def包装(编号):
尝试:
如果数字<0:
举出负数
如果数字>10:
大数
除负数外:
返回“负数”
除BigNumber外:
返回“大数字”
返回f(编号)
退货包装
@检查例外情况
def添加_2(编号):
返回号码+2
对于数字输入(-1、5、15):
打印(添加两个(数量))
输出:

Negative Number 7 Big Number 负数 7. 大数
谢谢。这正是我想做的