Согласно документации urllib2 ,
Поскольку обработчики по умолчанию обрабатывают перенаправления (коды в диапазоне 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
с, то когда urllib2.urlopen()
просто возвращает обычный файл-подобныйобъект ответа, как и вся документация urllib2
, на которую ссылается?