首页 > 解决方案 > Python:用于跨具有不同输入的函数验证键值错误的装饰器

问题描述

我正在寻找一个装饰器来进行参数验证。事情是,为了 DRY 的利益,我希望将它用于具有不同所需参数和键值参数组合的各种函数。在下面做这样的事情最pythonic的方式是什么?我什至可以,或者我应该为每种输入组合制作一个装饰器吗?

def my_decorator(func):
    def func_wrapper(x, y, a, b, c, d):
        # Check that inputs are valid
        if a <= 0 or b <= 0 or c <= 0 or d <= 0:
            raise Exception("a, b, c, & d must be positive")
        if x < 0 or y < 0:
            raise Exception("x & y must be non-negative")
        return func(some_inputs)
    return func_wrapper

@my_decorator
def my_fun_1(x, a=None, b=None):
    return x ** (a + b)

@my_decorator
def my_fun_2(x, y, c=None):
    return x + y - c

...

@my_decorator
def my_fun_n(y, b=None, d=None):
    return y ** (b - d)

提前致谢!

标签: pythonvalidation

解决方案


from valdec.decorators import validate
from valdec.errors import ValidationArgumentsError, ValidationReturnError


@validate
def add(a: int, b: int) -> int:
   return a + b

assert add(2, 3) == 5

try:
    add("s", 3)
except ValidationArgumentsError:
    pass


@validate("b", "return")
def foo(a: int, b: int) -> int:
   return "str"

try:
    foo("s", 3)
except ValidationReturnError:
    pass

valdec:https ://github.com/EvgeniyBurdin/valdec


推荐阅读