Я использую библиотеку запросов Python для реализации логики повтора. Вот простой script, который я сделал, чтобы воспроизвести проблему, которая у меня есть. В случае, когда у нас заканчиваются попытки, я хотел бы иметь возможность регистрировать хотя бы один из ответов сервера, чтобы помочь отлаживать. Однако мне не ясно, как получить доступ к этой информации. Конечно, я мог бы повторить попытку каким-то другим способом для достижения моей цели, но казалось, что это не так уж и много, и я был бы удивлен, узнав, что запросы не поддерживают мой прецедент.
Я просмотрел request.exceptions.RetryError, request.packages.urllib3.exceptions.MaxRetryError, который он обертывает, и request.packages.urllib3.exceptions.ResponseError, который обертывает все безрезультатно.
Я что-то пропустил?
#!/usr/bin/env python
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from requests.exceptions import RetryError
def main():
    retry_policy = Retry(
        total=3,
        status_forcelist=[418])
    session = requests.Session()
    session.mount('http://', HTTPAdapter(max_retries=retry_policy))
    try:
        session.get('http://httpbin.org/status/418')
    except RetryError as retry_error:
        print retry_error
        print retry_error.response is None
if __name__ == '__main__':
    main()
$python test.py
HTTPConnectionPool(host='httpbin.org', port=80): Max retries exceeded with url: /status/418 (Caused by ResponseError('too many 418 error responses',))
True
