diff -r 7ffe3d304487 Lib/test/test_urllib2.py --- a/Lib/test/test_urllib2.py Fri Dec 09 11:29:44 2011 +0100 +++ b/Lib/test/test_urllib2.py Fri Dec 09 16:33:26 2011 +0200 @@ -1460,6 +1460,17 @@ >>> assert hasattr(err, 'reason') >>> err.reason 'something bad happened' + + HTTPError is a subclass of addinfourl, so geturl(), getcode() and info() + should work. + + >>> url = "http://url.com" + >>> code = 404 + >>> hdrs = {"foo": "bar"} + >>> err = urllib.error.HTTPError(url, code, None, hdrs, None) + >>> assert err.geturl() == url + >>> assert err.getcode() == code + >>> assert err.info() == hdrs """ def test_main(verbose=None): diff -r 7ffe3d304487 Lib/urllib/error.py --- a/Lib/urllib/error.py Fri Dec 09 11:29:44 2011 +0100 +++ b/Lib/urllib/error.py Fri Dec 09 16:33:26 2011 +0200 @@ -40,10 +40,8 @@ __super_init = urllib.response.addinfourl.__init__ def __init__(self, url, code, msg, hdrs, fp): - self.code = code self.msg = msg self.hdrs = hdrs - self.fp = fp self.filename = url # The addinfourl classes depend on fp being a valid file # object. In some cases, the HTTPError may not have a valid @@ -51,6 +49,11 @@ # not initialize the base classes. if fp is not None: self.__super_init(fp, hdrs, url, code) + else: + self.headers = hdrs + self.url = url + self.code = code + self.fp = fp def __str__(self): return 'HTTP Error %s: %s' % (self.code, self.msg)