--- /dev/null
+# Exceptions
+
+## Request and Response exceptions
+
+The most important exception classes in HTTPX are `RequestError` and `HTTPStatusError`.
+
+The `RequestError` class is a superclass that encompasses any exception that occurs
+while issuing an HTTP request. These exceptions include a `.request` attribute.
+
+```python
+try:
+ response = httpx.get("https://www.example.com/")
+except httpx.RequestError as exc:
+ print(f"An error occured while requesting {exc.request.url!r}.")
+```
+
+The `HTTPStatusError` class is raised by `response.raise_for_status()` on 4xx and 5xx responses.
+These exceptions include both a `.request` and a `.response` attribute.
+
+```python
+response = httpx.get("https://www.example.com/")
+try:
+ response.raise_for_status()
+except httpx.HTTPStatusError as exc:
+ print(f"Error response {exc.response.status_code} while requesting {exc.request.url!r}.")
+```
+
+There is also a base class `HTTPError` that includes both of these categories, and can be used
+to catch either failed requests, or 4xx and 5xx responses.
+
+You can either use this base class to catch both categories...
+
+```python
+try:
+ response = httpx.get("https://www.example.com/")
+ response.raise_for_status()
+except httpx.HTTPError as exc:
+ print(f"Error while requesting {exc.request.url!r}.")
+```
+
+Or handle each case explicitly...
+
+```python
+try:
+ response = httpx.get("https://www.example.com/")
+ response.raise_for_status()
+except httpx.RequestError as exc:
+ print(f"An error occured while requesting {exc.request.url!r}.")
+except httpx.HTTPStatusError as exc:
+ print(f"Error response {exc.response.status_code} while requesting {exc.request.url!r}.")
+```
+
+---
+
+## The exception hierarchy
+
+* HTTPError
+ * RequestError
+ * TransportError
+ * TimeoutException
+ * ConnectTimeout
+ * ReadTimeout
+ * WriteTimeout
+ * PoolTimeout
+ * NetworkError
+ * ConnectError
+ * ReadError
+ * WriteError
+ * CloseError
+ * ProtocolError
+ * LocalProtocolError
+ * RemoteProtocolError
+ * ProxyError
+ * UnsupportedProtocol
+ * DecodingError
+ * TooManyRedirects
+ * RequestBodyUnavailable
+ * HTTPStatusError
+* NotRedirectResponse
+* CookieConflict
+* StreamError
+ * StreamConsumed
+ * ResponseNotRead
+ * RequestNotRead
+ * ResponseClosed
+
+---
+
+## Exception classes
+
+::: httpx.HTTPError
+ :docstring:
+
+::: httpx.RequestError
+ :docstring:
+
+::: httpx.TransportError
+ :docstring:
+
+::: httpx.TimeoutException
+ :docstring:
+
+::: httpx.ConnectTimeout
+ :docstring:
+
+::: httpx.ReadTimeout
+ :docstring:
+
+::: httpx.WriteTimeout
+ :docstring:
+
+::: httpx.PoolTimeout
+ :docstring:
+
+::: httpx.NetworkError
+ :docstring:
+
+::: httpx.ConnectError
+ :docstring:
+
+::: httpx.ReadError
+ :docstring:
+
+::: httpx.WriteError
+ :docstring:
+
+::: httpx.CloseError
+ :docstring:
+
+::: httpx.ProtocolError
+ :docstring:
+
+::: httpx.LocalProtocolError
+ :docstring:
+
+::: httpx.RemoteProtocolError
+ :docstring:
+
+::: httpx.ProxyError
+ :docstring:
+
+::: httpx.UnsupportedProtocol
+ :docstring:
+
+::: httpx.DecodingError
+ :docstring:
+
+::: httpx.TooManyRedirects
+ :docstring:
+
+::: httpx.RequestBodyUnavailable
+ :docstring:
+
+::: httpx.HTTPStatusError
+ :docstring:
+
+::: httpx.NotRedirectResponse
+ :docstring:
+
+::: httpx.CookieConflict
+ :docstring:
+
+::: httpx.StreamError
+ :docstring:
+
+::: httpx.StreamConsumed
+ :docstring:
+
+::: httpx.ResponseNotRead
+ :docstring:
+
+::: httpx.RequestNotRead
+ :docstring:
+
+::: httpx.ResponseClosed
+ :docstring:
Base class for `RequestError` and `HTTPStatusError`.
Useful for `try...except` blocks when issuing a request,
- and then calling .raise_for_status().
+ and then calling `.raise_for_status()`.
For example:
+ ```
try:
response = httpx.get("https://www.example.com")
response.raise_for_status()
except httpx.HTTPError as exc:
print(f"HTTP Exception for {exc.request.url} - {exc.message}")
+ ```
"""
def __init__(self, message: str, *, request: "Request") -> None:
class TransportError(RequestError):
"""
- Base class for all exceptions that are mapped from the httpcore API.
+ Base class for all exceptions that occur at the level of the Transport API.
+
+ All of these exceptions also have an equivelent mapping in `httpcore`.
"""
class ProxyError(TransportError):
"""
- An error occurred while proxying a request.
+ An error occurred while establishing a proxy connection.
"""
class DecodingError(RequestError):
"""
- Decoding of the response failed.
+ Decoding of the response failed, due to a malformed encoding.
"""
class HTTPStatusError(HTTPError):
"""
- Response sent an error HTTP status.
+ The response had an error HTTP status of 4xx or 5xx.
May be raised when calling `response.raise_for_status()`
"""