Python requests exception handling
Assuming you did import requests
, you want requests.ConnectionError
. ConnectionError
is an exception defined by requests
. See the API documentation here.
Thus the code should be :
try: requests.get('http://www.google.com')except requests.ConnectionError: # handle the exception
As per the documentation, I have added the below points:-
In the event of a network problem (refused connection e.g internet issue), Requests will raise a ConnectionError exception.
try: requests.get('http://www.google.com')except requests.ConnectionError: # handle ConnectionError the exception
In the event of the rare invalid HTTP response, Requests will raise an HTTPError exception.Response.raise_for_status() will raise an HTTPError if the HTTP request returned an unsuccessful status code.
try: r = requests.get('http://www.google.com/nowhere') r.raise_for_status()except requests.exceptions.HTTPError as err: #handle the HTTPError request here
In the event of times out of request, a Timeout exception is raised.
You can tell Requests to stop waiting for a response after a given number of seconds, with a timeout arg.
requests.get('https://github.com/', timeout=0.001)# timeout is not a time limit on the entire response download; rather, # an exception is raised if the server has not issued a response for# timeout seconds
All exceptions that Requests explicitly raises inherit from requests.exceptions.RequestException. So a base handler can look like,
try: r = requests.get(url)except requests.exceptions.RequestException as e: # handle all the errors here
Actually, there are much more exceptions that requests.get()
can generate than just ConnectionError
. Here are some I've seen in production:
from requests import ReadTimeout, ConnectTimeout, HTTPError, Timeout, ConnectionErrortry: r = requests.get(url, timeout=6.0)except (ConnectTimeout, HTTPError, ReadTimeout, Timeout, ConnectionError): continue