Code Reference

Requests Errors & Retries

Python · Reference cheat sheet

Python · Reference cheat sheet


📋 Overview

Distinguish network failures, timeouts, and HTTP error statuses. Retry idempotent GETs with backoff; don't blindly retry POST without idempotency keys.

🔧 Core concepts

ExceptionMeaning
TimeoutConnect/read deadline
ConnectionErrorDNS / refused / reset
HTTPErrorFrom raise_for_status
RequestExceptionBase catch-all
Status 429/503Often retryable

💡 Examples

Classify errors:

import requests

try:
    r = requests.get("https://httpbin.org/status/500", timeout=5)
    r.raise_for_status()
except requests.Timeout:
    print("timeout")
except requests.HTTPError as e:
    print("http", e.response.status_code)
except requests.RequestException as e:
    print("other", e)

Simple retry for GET:

import time
import requests

def get_with_retry(url, attempts=3):
    last = None
    for i in range(attempts):
        try:
            r = requests.get(url, timeout=5)
            if r.status_code in (429, 503):
                time.sleep(2 ** i)
                continue
            r.raise_for_status()
            return r
        except requests.RequestException as e:
            last = e
            time.sleep(2 ** i)
    raise last

⚠️ Pitfalls

  • Retrying non-idempotent POST can duplicate charges/orders.
  • Infinite retries without jitter can stampede a failing service.
  • Log response.text[:200] on failure for debugging — not full secrets.

On this page