Ошибка Python/Django "BadStatusLine"

Я получаю странную ошибку, которую я не могу найти для решения.

Эта ошибка не возникает каждый раз, когда я нажимаю этот сегмент кода, и это также не происходит для той же итерации через цикл (это происходит в цикле). Если я запустил его достаточно, он, похоже, не встретит ошибки, и программа будет успешно выполнена. Несмотря на это, мне все равно хотелось бы выяснить, почему это происходит.

Вот моя ошибка, версии, трассировка и т.д.: http://dpaste.com/681658/

Кажется, что в моем коде следующая строка:

page = urllib2.urlopen(url)

Где URL-адрес... URL явно.

И в моем коде есть import urllib2.

Ответ 1

Исключение BadStatusLine возникает, когда вы вызываете urllib2.urlopen(url), а удаленный сервер отвечает кодом состояния, который python не может понять.

Предполагая, что вы не контролируете url, вы не можете предотвратить это. Все, что вы можете сделать - это поймать исключение и грамотно управлять им.

from httplib import BadStatusLine

try:
    page = urllib2.urlopen(url)
    # do something with page
except BadStatusLine:
    print "could not fetch %s" % url

Ответ 2

Это не имеет ничего общего с Django, это исключение, вызванное urllib2, которое не могло разобрать ответ после извлечения вашего URL-адреса. Это может быть проблема с сетью, некорректный ответ... Некоторые серверы/приложения случайно выбрали эту ошибку. Если вы не контролируете, что возвращает этот URL-адрес, вы остаетесь с улавливанием исключения, отладка URL-адресов вызывает проблемы и пытается идентифицировать шаблон.

Ответ 3

Пояснения от других пользователей правы и хороши, но на практике вы можете найти это полезным:
По моему опыту это обычно происходит, когда вы отправляете некотируемые значения в параметры URL-адреса, например значения, содержащие пробелы или другие символы, которые должны быть закодированы или закодированы.