首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python重试使用没有装饰器的坚韧

Python重试使用没有装饰器的坚韧
EN

Stack Overflow用户
提问于 2018-11-24 19:13:25
回答 2查看 2.8K关注 0票数 2

我正在尝试重新尝试使用坚韧(没有装饰师)。我的代码看起来像解释过的这里

代码语言:javascript
复制
import logging
from tenacity import retry
import tenacity


def print_msg():
    try:
        logging.info('Hello')
        logging.info("World")
        raise Exception('Test error')
    except Exception as e:
        logging.error('caught error')
        raise e


if __name__ == '__main__':
    logging.basicConfig(
        format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
        datefmt='%d-%m-%Y:%H:%M:%S',
        level=logging.INFO)
    logging.info('Starting')
    try:
        r = tenacity.Retrying(
            tenacity.stop_after_attempt(2),
            tenacity.wait_incrementing(start=10, increment=100, max=1000),
            reraise=True
        )
        try:
            r.call(print_msg)
        except Exception:
            logging.error('Test error 2')
    except Exception:
        logging.error('Received Exception')

在执行上述代码时。输出如下所示,没有重试

代码语言:javascript
复制
/Users/dmanna/PycharmProjects/demo/venv/bin/python /Users/dmanna/PycharmProjects/demo/retrier.py
25-11-2018:00:29:47,140 INFO     [retrier.py:21] Starting
25-11-2018:00:29:47,140 INFO     [retrier.py:8] Hello
25-11-2018:00:29:47,140 INFO     [retrier.py:9] World
25-11-2018:00:29:47,140 ERROR    [retrier.py:12] caught error
25-11-2018:00:29:47,141 ERROR    [retrier.py:31] Test error 2

Process finished with exit code 0

谁能让我知道出了什么问题,因为我没有看到在上面的代码任何重试?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-26 12:10:13

这里已经回答了这个问题。交叉张贴答案

哼,我不认为您在这里正确地使用了API: R= tenacity.Retrying( tenacity.stop_after_attempt(2),tenacity.wait_incrementing(start=10,increment=100,max=1000),reraise=True ) 这意味着: R= tenacity.Retrying( sleep=tenacity.stop_after_attempt(2),stop=tenacity.wait_incrementing(start=10,increment=100,max=1000),reraise=True ) 做你想做的事。 你想: R= tenacity.Retrying( stop=tenacity.stop_after_attempt(2),wait=tenacity.wait_incrementing(start=10,increment=100,max=1000),reraise=True )

票数 1
EN

Stack Overflow用户

发布于 2020-05-03 16:32:04

注意对于Python用户(它支持注释),要显式地强制在3.4+中进行重试,一般的用例是用一个简单的@retry对它进行注释,然后引发特殊的异常TryAgain

代码语言:javascript
复制
@retry
def do_something():
    result = something_else()
    if result == 23:
       raise TryAgain

这种类似于Python2.7 在这页上的答案的方法也可以实现:

代码语言:javascript
复制
import tenacity

def do_something():
    result = something_else()
    if result == 23:
       raise TryAgain

r = tenacity.Retrying(
        stop=tenacity.stop_after_attempt(2),
        wait=tenacity.wait_incrementing(start=10, increment=100, max=1000)
    )
r.wraps(do_something)

有关更多细节,请参见关于是否重试的API文档定义注释的源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53461533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档