ITEEDU

错误处理

如果你准备处理HTTP错误和URL错误这里有两种基本的方法,我更倾向于后一种:

from urllib2 import Request, urlopen, URLError, HTTPError
req = Request(someurl)
try:
    response = urlopen(req)
except HTTPError, e:
    print 'The server couldn\'t fulfill the request.'
    print 'Error code: ', e.code
except URLError, e:
    print 'We failed to reach a server.'
    print 'Reason: ', e.reason
else:
    # everything is fine

注意HTTP错误异常必须在前面,否则URL错误也会捕获一个HTTP错误。

from urllib2 import Request, urlopen, URLError
req = Request(someurl)
try:
    response = urlopen(req)
except URLError, e:
    if hasattr(e, 'reason'):
        print 'We failed to reach a server.'
        print 'Reason: ', e.reason
    elif hasattr(e, 'code'):
        print 'The server couldn\'t fulfill the request.'
        print 'Error code: ', e.code
else:
    # everything is fine

注意: URL错误是IO错误异常的一个子类。这意味着你能避免引入(import)URL错误而使用:

from urllib2 import Request, urlopen

req = Request(someurl)

try:

    response = urlopen(req)

except IOError, e:

    if hasattr(e, 'reason'):

        print 'We failed to reach a server.'

        print 'Reason: ', e.reason

    elif hasattr(e, 'code'):

        print 'The server couldn\'t fulfill the request.'

        print 'Error code: ', e.code

else:

    # everything is fine 

极少数环境下,urllib2能够抛出socket.error.