Коды ошибок, возвращаемые urllib / urllib2 и реальной страницей - PullRequest
4 голосов
/ 26 ноября 2009

нормальное поведение urllib / urllib2 - если в заголовке ответа отправляется код ошибки (т. Е. 404), возникает исключение.

Как вы смотрите на конкретные ошибки, т. Е. (40x или 50x), основанные на разных ошибках, делают разные вещи. Кроме того, как вы читаете фактические данные, возвращаемые HTML / JSON и т. Д. (Данные обычно содержат подробные сведения об ошибках, которые отличаются от кода ошибки HTML)

Ответы [ 2 ]

9 голосов
/ 26 ноября 2009

urllib2 повышает HTTPError при возникновении ошибок HTTP. Вы можете получить код ответа, используя code для объекта исключения. Вы можете получить данные ответа, используя read():

>>> req = urllib2.Request('http://www.python.org/fish.html')
>>> try:
>>>     urllib2.urlopen(req)
>>> except urllib2.HTTPError, e:
>>>     print e.code
>>>     print e.read()
>>>
404
<actual data response will be here>
1 голос
/ 26 ноября 2009

В urllib2 HTTPError исключение также является действительным ответом HTTP, поэтому вы можете рассматривать ошибку HTTP как исключительное событие или действительный ответ. Но в urllib вы должны создать подкласс URLopener и определить http_error_<code> method [s] или переопределить http_error_default, чтобы обработать их все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...