当我的 get 或 post 出现错误响应直到超过最大重试次数时,我想知道问题的原因。
我在下面有一个示例测试。这会按预期抛出 MaxRetriesError。然而,原来的HTTPError似乎丢失了。
from requests import Session, exceptions
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
from unittest import TestCase
import logging
class TestRequests(TestCase):
def test_retries(self):
session = Session()
retries = Retry(total=5,
backoff_factor=0.1,
status_forcelist=[500, 502, 503, 504],
method_whitelist=frozenset(['GET', 'POST']))
session.mount('https://', HTTPAdapter(max_retries=retries))
session.mount('http://', HTTPAdapter(max_retries=retries))
try:
result = session.get('https://httpbin.org/status/500',
stream=True,
timeout=2)
print(result)
except exceptions.HTTPError as e:
logging.error('http', exc_info=e)
except exceptions.RetryError as e:
logging.error('retry', exc_info=e)
Run Code Online (Sandbox Code Playgroud)
Traceback 显示以下信息,它仅追溯到最后一个 RetryError,而不是 HTTPError。异常的字符串确实提到了响应代码,但解析错误消息字符串并不是一种可靠的方法。
ERROR:root:retry
Traceback (most recent call last):
File "/home/giles/venv/gphotos-sync3/lib/python3.6/site-packages/requests/adapters.py", line 449, …Run Code Online (Sandbox Code Playgroud)