如果你准备处理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.