我试图在装饰函数的装饰器上进行一些参数修改。
原始代码如下:
@original_decorator(arg=some_object)
def calculate(a, b):
# complex business logic
raise Exception()
其中original_decorator
负责异常处理。
我要实现的是对some_object
进行一些临时修改,并在函数返回后恢复其属性。
我尝试了以下
def replace_arg(arg, add_some_property):
def decorator_wrapper(decorator_func):
def decorator_inner(*decorator_args, **decorator_kwargs):
def actual_wrapper(actual_func):
def actual_inner(*actual_args, **actual_kwargs):
original = arg['func']
arg['func'] = add_some_property
decorator_kwargs['arg'] = arg
result = actual_func(*actual_args, **actual_kwargs)
arg['func'] = original
return result
return actual_inner
return actual_wrapper
return retry_inner
return retry_wrapper
还尝试将修改逻辑放在decorator_inner
中,但都没有起作用。
我的问题: