【发布时间】:2018-11-24 19:13:25
【问题描述】:
我正在尝试使用坚韧(没有装饰器)重试。我的代码看起来像 here 解释的那样。
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')
在执行上述代码时。输出如下所示,无需重试
/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
由于我在上面的代码中没有看到任何重试,有人可以告诉我出了什么问题吗?
【问题讨论】:
-
too many try constructions ) 检查
r.call(print_msg())如果不是从try结构调用它会如何工作。 -
它是更大代码的一部分。我试图简化在此处发布的问题。但是,即使在 try 中调用,这也不应该有效吗?
标签: python python-2.7 python-tenacity