Exception Handling Of Python Requests Module

Python Requests is a well-liked library for sending HTTP requests in Python. It provides a simple and natural method of interacting with websites and APIs. However, just like with any other programming task, handling exceptions correctly is crucial when working with the Requests module. You can handle errors politely and prevent your program from crashing or producing unexpected results by using exception handling.

Understanding Exceptions

An exception in Python is an occurrence that interferes with the regular flow of instructions while a program is being executed. The program halts execution when an exception is encountered and jumps to a specific exception-handling block. You can catch and properly handle these exceptions by using exception handling.

Common Exceptions in Requests

Several exceptions can be raised by the Requests module while an HTTP request is being processed. Here are the most common exceptions you may encounter:

  • ConnectionError: When the server cannot be reached. This might be due to DNS resolution issues or connection rejection.

  • Timeout: Raised when a request runs out of time without a reply. It can happen when the server is responding slowly or when there are network problems.

  • TooManyRedirects: Raised when the request makes more redirects than allowed.

  • HTTPError: Raised for HTTP responses that fail (status codes 400 and higher).

  • RequestException: The base exception class for the Requests module that includes all other request-related exceptions.

Basic Exception Handling

To handle exceptions in the Requests module, you can use a try-except block. Here's a basic example ?

import requests

try:
    response = requests.get("https://httpbin.org/status/200")
    response.raise_for_status()  # Raise an exception for unsuccessful HTTP status codes
    print("Request successful!")
    print(f"Status Code: {response.status_code}")
except requests.exceptions.RequestException as e:
    print("An error occurred:", e)
Request successful!
Status Code: 200

The raise_for_status() method is used to throw an exception when an HTTP status code indicates failure (4xx or 5xx).

Handling Specific Exceptions

By catching each exception separately, you can deal with specific exceptions differently ?

import requests

try:
    response = requests.get("https://httpbin.org/delay/1", timeout=0.5)
    response.raise_for_status()
    print("Request successful!")
except requests.exceptions.ConnectionError:
    print("A connection error occurred. Please check your internet connection.")
except requests.exceptions.Timeout:
    print("The request timed out.")
except requests.exceptions.HTTPError as e:
    print("HTTP Error:", e)
except requests.exceptions.RequestException as e:
    print("An error occurred:", e)
The request timed out.

Handling Multiple Exceptions

You can handle multiple exceptions in a single except block when you want to perform the same action for different exception types ?

import requests

try:
    response = requests.get("https://httpbin.org/status/404")
    response.raise_for_status()
    print("Request successful!")
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e:
    print("A connection error or timeout occurred:", e)
except requests.exceptions.HTTPError as e:
    print("HTTP Error:", e.response.status_code)
except requests.exceptions.RequestException as e:
    print("An error occurred:", e)
HTTP Error: 404

Using Finally Block for Cleanup

The finally block contains code that will always be executed, regardless of whether an exception occurs ?

import requests

try:
    response = requests.get("https://httpbin.org/status/200")
    response.raise_for_status()
    print("Request successful!")
except requests.exceptions.RequestException as e:
    print("An error occurred:", e)
finally:
    print("Cleaning up resources...")
Request successful!
Cleaning up resources...

Raising Custom Exceptions

You can create custom exceptions based on specific conditions for more precise error handling ?

import requests

class CustomAPIException(Exception):
    pass

try:
    response = requests.get("https://httpbin.org/status/201")
    if response.status_code != 200:
        raise CustomAPIException(f"Unexpected status code: {response.status_code}")
    print("Request successful!")
except requests.exceptions.RequestException as e:
    print("Request error occurred:", e)
except CustomAPIException as e:
    print("Custom Exception:", e)
Custom Exception: Unexpected status code: 201

Best Practices Summary

Practice Description Example
Specific Exceptions Catch specific exceptions first ConnectionError before RequestException
Use raise_for_status() Check HTTP status codes response.raise_for_status()
Set Timeouts Prevent hanging requests requests.get(url, timeout=5)
Log Exceptions Record errors for debugging logging.error()

Conclusion

Exception handling is essential when working with the Python Requests module to handle errors gracefully and ensure code reliability. By understanding common exceptions, using try-except blocks effectively, and implementing proper logging, you can create robust applications that handle unexpected situations successfully.

Updated on: 2026-03-27T09:04:01+05:30

13K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements