根据urllib2 文档 http://docs.python.org/howto/urllib2.html#httperror,
由于默认处理程序处理重定向(300 范围内的代码),而 100-299 范围内的代码表示成功,因此您通常只会看到 400-599 范围内的错误代码。
还有下面的代码
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
引发一个 HTTPError,代码为 201(已创建):
ERROR 2011-08-11 20:40:17,318 __init__.py:463] HTTP Error 201: Created
那么为什么是urllib2
在此成功请求上抛出 HTTPErrors?
并不是太痛;我可以轻松地将代码扩展为:
try:
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
except HTTPError, e:
if e.code == 201:
# success! :)
else:
# fail! :(
else:
# when will this happen...?
但是,根据文档以及我找不到关于这种奇怪行为的类似问题的事实,这似乎不是预期的行为。
另外,应该怎样做else
块期待吗?如果成功的状态码全部解释为HTTPError
s,那么什么时候urllib2.urlopen()
只需返回一个普通的类似文件的响应对象,就像所有urllib2
文档指的是?