You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不抛出异常的情况下触发Python tenacity库的重试机制?

在Python tenacity库中不抛出异常触发重试的方法

完全可行,tenacity本身就支持基于返回结果的重试逻辑,不需要依赖异常抛出就能触发重试,刚好能解决你调试时的痛点——既不会因为重试逻辑抛出异常导致调试器频繁暂停,又能保留对其他真实异常的调试监听。

核心实现思路

通过retry_if_result参数指定一个判断函数,当被装饰函数的返回值满足该函数的条件时,自动触发重试。

示例1:基于布尔值判断重试

比如当函数返回False时触发重试,最多重试3次:

from tenacity import retry, stop_after_attempt, retry_if_result

def my_task():
    print("执行任务中...")
    # 模拟需要重试的场景,返回False
    return False

# 当返回值不为True时触发重试
@retry(stop=stop_after_attempt(3), retry=retry_if_result(lambda res: not res))
def run_task():
    return my_task()

run_task()

示例2:自定义复杂判断逻辑

如果需要更灵活的判断规则,可以单独定义判断函数,比如返回特定标记字符串时触发重试:

from tenacity import retry, stop_after_attempt, retry_if_result

def need_retry(res):
    # 自定义重试条件:返回值为"need_retry"时触发
    return res == "need_retry"

def business_logic():
    print("处理业务逻辑...")
    # 模拟需要重试的业务状态
    return "need_retry"

@retry(stop=stop_after_attempt(3), retry=retry_if_result(need_retry))
def run_business():
    return business_logic()

run_business()

额外说明

如果需要同时兼顾异常重试和返回值重试,可以用retry_any组合多个条件,但针对你的需求,只用retry_if_result就足够实现无异常触发重试的效果。

内容的提问来源于stack exchange,提问作者semyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:22:08