catch specific HTTP error in python

前端 未结 3 1796
半阙折子戏
半阙折子戏 2020-11-30 22:15

I want to catch a specific http error and not any one of the entire family.. what I was trying to do is --

import urllib2
try:
   urllib2.urlopen(\"some url\         


        
相关标签:
3条回答
  • 2020-11-30 22:47

    Tims answer seems to me as misleading. Especially when urllib2 does not return 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 urllib2
    try:
        urllib2.urlopen("some url")
    except urllib2.HTTPError, 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?

    0 讨论(0)
  • 2020-11-30 22:53

    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 urllib2
    from urllib2 import HTTPError
    try:
       urllib2.urlopen("some url")
    except HTTPError as err:
       if err.code == 404:
           <whatever>
       else:
           raise
    
    0 讨论(0)
  • 2020-11-30 23:00

    For Python 3.x

    import urllib.request
    from urllib.error import HTTPError
    try:
        urllib.request.urlretrieve(url, fullpath)
    except urllib.error.HTTPError as err:
        print(err.code)
    
    0 讨论(0)
提交回复
热议问题