gpt4 book ai didi

python - 使用 Tenacity 重试时可以动态更改传递给函数的参数吗?

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:58 25 4
gpt4 key购买 nike

我想使用 Tenacity用于其 @retry 装饰器的 Python 库。但是,我想在每次重试时使用不同的参数调用我的函数,并且不确定如何指定。

我的函数定义如下所示:

from tenacity import retry, retry_if_exception_type, stop_after_attempt

class CustomError(Exception):
pass

@retry(retry=retry_if_exception_type(CustomError), stop=stop_after_attempt(2))
def my_function(my_param):
result = do_some_business_logic(my_param)
if not result:
if my_param == 1:
raise CustomError()
else:
raise ValueError()

# first invoke the function with my_param=1, then retry with my_param=2
my_function(1)

这有点简化,但想法是,当我第一次调用该函数时,我将传入 1 作为第一个参数。重试时,我希望它将此值更改为 2。这可以通过 Tenacity 的 @retry 装饰器来完成吗?也许通过回调?

最佳答案

最简单的方法可能是传入一个可迭代对象,而不是整数,它会产生您想要的值。例如:

@retry(retry=retry_if_exception_type(CustomError), stop=stop_after_attempt(2))
def my_function(my_iter):
my_param = next(my_iter)
result = do_some_business_logic(my_param)
if not result:
if my_param == 1:
raise CustomError()
else:
raise ValueError()

my_function(iter([1, 2]))

这看起来确实像 XY problem , 尽管;可能有更好的方法来使用坚韧来做你想做的事。也许您应该发布一个有关重试的更一般性问题。

关于python - 使用 Tenacity 重试时可以动态更改传递给函数的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54259345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com