retry模块作为装饰器,可自动重试抛出异常的函数,支持通过参数设置重试次数、延迟间隔、退避因子和最大延迟,实现简洁高效的错误重试机制,适用于网络请求等易错场景,无需修改原函数逻辑,提高代码健壮性。
在 Python 错误处理中,开发者通常首先想到 try-except。然而,若只需让某个函数在报错后自动重试几次,每次编写 try-except 就显得冗长。retry 模块专为此设计——通过一个装饰器即可实现,简洁高效。以下介绍其基本用法。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
retry 最常见的使用方式是将它作为装饰器直接应用于函数。不传递任何参数时,其效果为:只要函数抛出异常,就会持续重试,直至成功。示例如下:
from retry import retry
@retry()
def make_trouble():
'''Retry until succeed'''
print ('retrying...')
raise
if __name__ == '__main__':
make_trouble()
# 输出: 一直重试,直到运行成功
retrying...
retrying...
retrying...
retrying...
retrying...
retrying...
在此代码中,make_trouble() 每次执行都会抛出异常,而 @retry() 会捕获异常并重新调用函数,因此屏幕上会不断打印“retrying...”,直至手动终止或函数成功运行。这就是 retry 的核心机制:重试,直至成功。
实际应用中,很少允许无限重试。retry 提供了多个关键参数来控制重试行为,其函数签名如下:
def retry(exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff=1, jitter=0, logger=logging_logger):
"""Return a retry decorator.
:param exceptions: an exception or a tuple of exceptions to catch. default: Exception.
:param tries: the maximum number of attempts. default: -1 (infinite).
:param delay: initial delay between attempts. default: 0.
:param max_delay: the maximum value of delay. default: None (no limit).
:param backoff: multiplier applied to delay between attempts. default: 1 (no backoff).
:param jitter: extra seconds added to delay between attempts. default: 0.
fixed if a number, random if a range tuple (min, max)
:param logger: logger.warning(fmt, error, delay) will be called on failed attempts.
default: retry.logging_logger. if None, logging is disabled.
"""
以下是各关键参数的作用说明:
(ValueError, TimeoutError),仅当出现指定类型异常时触发重试。delay 配合使用,计算公式为 delay * backoff ** (尝试次数 - 1)。例如 delay=3,backoff=2,第一次重试前等待 3×2=3 秒,第二次等待 3×2=6 秒,第三次等待 12 秒,依次类推。默认 backoff=1 表示不增长。delay * backoff 超过该值时,等待时间不再增长,固定为 max_delay。附录:git源码
retry 模块的最大优势在于轻量、直接,仅需几行代码即可为函数添加重试机制。与手动编写 try-except 循环相比,它使代码更整洁、可读性更高。在实际项目中,结合 tries 和 delay 参数,可优雅地处理网络请求、文件读写等易出错场景。若遇到更复杂的重试逻辑(如指数退避、随机抖动),可考虑更强大的 tenacity 库,但在大多数情况下,retry 已足够使用。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述