2012-01-04 107 views
13

我得到一个奇怪的错误,我似乎无法找到解决方案。Python/Django“BadStatusLine”错误

每次我碰到这段代码时都不会发生这个错误,并且它不会发生在循环中的相同迭代(它发生在循环中)。如果我足够运行它,它似乎没有遇到错误,并且程序成功执行。无论如何,我仍然想知道为什么会发生这种情况。

这里是我的错误,版本,跟踪等:http://dpaste.com/681658/

这似乎与我下面的代码行发生:

page = urllib2.urlopen(url) 

其中URL是....一个URL明显。我的代码中有import urllib2

回答

29

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 
7

这与Django没有任何关系,它是urllib2抛出的一个异常,它在取回你的url后无法解析响应。这可能是网络问题,格式错误的响应...某些服务器/应用程序随机抛出这种错误。如果您不控制该URL返回的内容,那么您只能捕获异常,调试哪些URL会导致问题并尝试识别模式。

7
来自其他用户的

解释是正确的,良好的,但在实践中,你可能会发现这个有用:
以我的经验,当你发送带引号的值的URL参数,如包含空格或其他值这通常发生需要引号或网址编码的字符。

+1

实际上,当你发送没有正确的URL编码的值时会发生什么,你会得到一个400错误的请求。 – 2013-05-13 18:36:46

+0

也许服务器设置错了(就像我自己写的那样),而不是400,它什么都没有发回。这是一个BadStatusLine。 – Noumenon 2016-01-29 02:51:04

+0

在我的情况下,它发生是因为我发送的头文件有'\ n' – 2018-02-21 07:57:14