2012-01-04 16 views
13

Me aparece un error extraño que parece que no puedo encontrar una solución.Python/Django "BadStatusLine" error

Este error no ocurre cada vez que pulso este segmento de código, y tampoco ocurre para la misma iteración a través del ciclo (ocurre en un ciclo). Si lo ejecuto lo suficiente, no parece encontrar el error y el programa se ejecuta con éxito. A pesar de eso, aún me gustaría descubrir por qué sucede esto.

Aquí es mi error, versiones, vestigios, etc: http://dpaste.com/681658/

Parece ocurrir con la siguiente línea en mi código:

page = urllib2.urlopen(url) 

Donde URL es una dirección URL .... obviamente.

Y tengo import urllib2 en mi código.

Respuesta

29

La excepción BadStatusLine se produce cuando llama al urllib2.urlopen(url) y el servidor remoto responde con un código de estado que python no puede entender.

Suponiendo que no controla url, no puede evitar que esto suceda. Todo lo que puede hacer es atrapar la excepción y administrarla con gracia.

from httplib import BadStatusLine 

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

Esto no tiene nada que ver con Django, es una excepción lanzada por urllib2 que no pudo analizar la respuesta después de recuperar su url. Puede ser un problema de red, una respuesta mal formada ... Algunos servidores/aplicaciones lanzan este tipo de error aleatoriamente. Si no controla lo que devuelve esta URL, se queda con la captura de la excepción, la depuración de las URL que causan problemas y la identificación de un patrón.

7

Explicaciones de otros usuarios están bien y bueno, pero en la práctica se pueden encontrar este útil:
En mi experiencia, esto suele ocurrir cuando está enviando los valores no cotizados a los parámetros de URL, como valores de los espacios que contengan u otro caracteres que necesitan ser comillas o codificados en url

+1

En realidad, lo que sucede cuando se envían valores sin la codificación URL adecuada es que se obtiene una solicitud incorrecta de 400. –

+0

Quizás el servidor esté configurado incorrectamente (como el que yo mismo escribí) y en lugar de 400 no devuelve nada. Eso es un BadStatusLine. – Noumenon

+0

En mi caso sucedió porque un encabezado que envié tenía un '\ n' –

Cuestiones relacionadas