商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Pythonretry模块怎么用?一文教你轻松掌握错误重试机制

Pythonretry模块怎么用?一文教你轻松掌握错误重试机制

  发布于2026-07-23 阅读(0)

扫一扫,手机访问

一、简介

Python 的错误处理,大多数人第一反应就是 try-except。但如果你只是想让某个函数在报错后自动重试几次,每次都写一堆 try-except 未免太啰嗦。retry 这个模块就是专门干这事儿的——一个装饰器搞定,简洁到没朋友。下面就来聊聊它的基本玩法。

Pythonretry模块怎么用?一文教你轻松掌握错误重试机制

二、基本用法

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 参数介绍

当然,实际场景中很少会允许无限重试。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.
    """

下面逐一说明几个关键参数的作用:

  • exceptions:指定要捕获哪些异常类型。默认是 Exception,即所有异常都抓。也可以传一个元组,比如 (ValueError, TimeoutError),只对指定类型的异常触发重试。
  • tries:最大重试次数,默认 -1 表示无限重试。实际使用时通常会设一个有限值,比如 3 或 5。
  • delay:每次重试之间的间隔(秒),默认 0 表示不等待。如果设成 2,则每次重试前会等 2 秒。
  • backoff:间隔时间的指数增长因子。配合 delay 使用,具体公式是 delay * backoff ** (尝试次数 - 1)。比如 delay=3, backoff=2,第一次重试前等 3×2⁰=3 秒,第二次等 3×2¹=6 秒,第三次等 12 秒……以此类推。默认 backoff=1 表示不增长。
  • max_delay:配合 backoff 使用,设置最大等待时间上限。当 delay * backoffⁿ 超过这个值后,就不再继续增长,固定为 max_delay

附录:git源码

四、总结

retry 模块最大的优点就是轻量、直接,几行代码就能给函数加上重试机制。相比手动写 try-except 循环,它让代码更干净,可读性更高。实际项目中,配合 triesdelay 参数,就能优雅地处理网络请求、文件读写等易出错的场景。当然,如果遇到更复杂的重试逻辑(比如指数退避、随机抖动),可以考虑更强大的 tenacity 库,但大部分场景下 retry 已经足够用了。

本文转载于:https://www.jb51.net/python/367887qlt.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注