首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python重试包-坚韧性:如何记录异常的根本原因?

Python重试包-坚韧性:如何记录异常的根本原因?
EN

Stack Overflow用户
提问于 2018-11-21 07:13:30
回答 2查看 5.5K关注 0票数 6

正如在这个问题中所讨论的,我正在使用坚韧进行重试。

玩具代码如下所示

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


@retry(wait=tenacity.wait_incrementing(start=10, increment=10, max=100), stop=tenacity.stop_after_attempt(3))
def print_msg():
    logging.info('Hello')
    logging.info("World")
    raise Exception('Test error')


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')
    print_msg()

输出如下所示

代码语言:javascript
复制
21-11-2018:12:40:48,586 INFO     [retrier.py:18] Starting
21-11-2018:12:40:48,586 INFO     [retrier.py:8] Hello
21-11-2018:12:40:48,586 INFO     [retrier.py:9] World
21-11-2018:12:40:58,592 INFO     [retrier.py:8] Hello
21-11-2018:12:40:58,592 INFO     [retrier.py:9] World
21-11-2018:12:41:18,596 INFO     [retrier.py:8] Hello
21-11-2018:12:41:18,596 INFO     [retrier.py:9] World
21-11-2018:12:41:18,596 ERROR    [retrier.py:22] Received Exception
Traceback (most recent call last):
  File "/Users/dmanna/PycharmProjects/demo/retrier.py", line 20, in <module>
    print_msg()
  File "/Users/dmanna/PycharmProjects/demo/venv/lib/python2.7/site-packages/tenacity/__init__.py", line 292, in wrapped_f
    return self.call(f, *args, **kw)
  File "/Users/dmanna/PycharmProjects/demo/venv/lib/python2.7/site-packages/tenacity/__init__.py", line 358, in call
    do = self.iter(retry_state=retry_state)
  File "/Users/dmanna/PycharmProjects/demo/venv/lib/python2.7/site-packages/tenacity/__init__.py", line 332, in iter
    six.raise_from(retry_exc, fut.exception())
  File "/Users/dmanna/PycharmProjects/demo/venv/lib/python2.7/site-packages/six.py", line 737, in raise_from
    raise value
RetryError: RetryError[<Future at 0x109fa6150 state=finished raised Exception>]

有人能让我知道如何记录异常的根本原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-21 08:20:28

您可以使用选项,没有详细的文档,但是可以读取其来源

代码语言:javascript
复制
...
  File "53406953.py", line 10, in print_msg
    raise Exception('Test error')
Exception: Test error
票数 5
EN

Stack Overflow用户

发布于 2022-03-09 17:07:47

您可以在python3下看到整个异常链

没错,这使得reraise=True变得没有必要。而且,使用reraise=True,您实际上正在丢失有价值的信息:

  • reraise=True
代码语言:javascript
复制
$ python demo.py
09-03-2022:12:01:35,552 INFO     [demo.py:18] Starting
09-03-2022:12:01:35,553 INFO     [demo.py:8] Hello
09-03-2022:12:01:35,553 INFO     [demo.py:9] World
09-03-2022:12:01:36,553 INFO     [demo.py:8] Hello
09-03-2022:12:01:36,554 INFO     [demo.py:9] World
09-03-2022:12:01:38,556 INFO     [demo.py:8] Hello
09-03-2022:12:01:38,556 INFO     [demo.py:9] World
Traceback (most recent call last):
  File "demo.py", line 19, in <module>
    print_msg()
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 324, in wrapped_f
    return self(f, *args, **kw)
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 404, in __call__
    do = self.iter(retry_state=retry_state)
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 360, in iter
    raise retry_exc.reraise()
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 193, in reraise
    raise self.last_attempt.result()
  File "/home/user/.asdf/installs/python/3.8.12/lib/python3.8/concurrent/futures/_base.py", line 437, in result
    return self.__get_result()
  File "/home/user/.asdf/installs/python/3.8.12/lib/python3.8/concurrent/futures/_base.py", line 389, in __get_result
    raise self._exception
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 407, in __call__
    result = fn(*args, **kwargs)
  File "demo.py", line 10, in print_msg
    raise Exception('Test error')
Exception: Test error
  • reraise=False
代码语言:javascript
复制
09-03-2022:12:02:07,444 INFO     [demo.py:18] Starting
09-03-2022:12:02:07,445 INFO     [demo.py:8] Hello
09-03-2022:12:02:07,445 INFO     [demo.py:9] World
09-03-2022:12:02:08,446 INFO     [demo.py:8] Hello
09-03-2022:12:02:08,446 INFO     [demo.py:9] World
09-03-2022:12:02:10,446 INFO     [demo.py:8] Hello
09-03-2022:12:02:10,446 INFO     [demo.py:9] World
Traceback (most recent call last):
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 407, in __call__
    result = fn(*args, **kwargs)
  File "demo.py", line 10, in print_msg
    raise Exception('Test error')
Exception: Test error

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "demo.py", line 19, in <module>
    print_msg()
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 324, in wrapped_f
    return self(f, *args, **kw)
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 404, in __call__
    do = self.iter(retry_state=retry_state)
  File "/home/demo/.venv/lib/python3.8/site-packages/tenacity/__init__.py", line 361, in iter
    raise retry_exc from fut.exception()
tenacity.RetryError: RetryError[<Future at 0x7fbedb05d760 state=finished raised Exception>]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53406953

复制
相关文章

相似问题

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