HTTPError hereda de URLError, por lo que para capturar ambas tendrías que hacer:
Código Python:
Ver originaltry:
....
except HTTPError as e:
....
except URLError as e:
....
Además:
- Si la respuesta es 30x, urllib2 se encargará de hacer la redirección, no lanza HTTPError.
- Los códigos < 300 son códigos de respuesta exitosa, por lo que no lanzan HTTPError. Los podés manejar como lo intentaste al principio
- Todo código >= 400 lanza un HTTPError