How do I catch a specific HTTP error in Python? How do I catch a specific HTTP error in Python? python python

How do I catch a specific HTTP error in Python?


Python 3

from urllib.error import HTTPError

Python 2

from urllib2 import HTTPError

Just catch HTTPError, handle it, and if it's not Error 404, simply use raise to re-raise the exception.

See the Python tutorial.

e.g. complete example for Pyhton 2

import urllib2from urllib2 import HTTPErrortry:   urllib2.urlopen("some url")except HTTPError as err:   if err.code == 404:       <whatever>   else:       raise


For Python 3.x

import urllib.requestfrom urllib.error import HTTPErrortry:    urllib.request.urlretrieve(url, fullpath)except urllib.error.HTTPError as err:    print(err.code)


Tim's answer seems to me as misleading especially when urllib2 does not return the expected code. For example, this error will be fatal (believe or not - it is not uncommon one when downloading urls):

AttributeError: 'URLError' object has no attribute 'code'

Fast, but maybe not the best solution would be code using nested try/except block:

import urllib2try:    urllib2.urlopen("some url")except urllib2.HTTPError as err:    try:        if err.code == 404:            # Handle the error        else:            raise    except:        ...

More information to the topic of nested try/except blocks Are nested try/except blocks in python a good programming practice?