Python/Django "BadStatusLine"错误

18 投票
3 回答
26901 浏览
提问于 2025-04-17 09:33

我遇到了一个奇怪的错误,找不到解决办法。

这个错误并不是每次运行到这段代码时都会出现,而且在循环中同一次运行也不一定会出错。如果我多次运行程序,似乎就不会遇到这个错误,程序也能顺利执行。不过,我还是想弄清楚为什么会发生这种情况。

这是我的错误信息、版本、跟踪等内容:http://dpaste.com/681658/

这个错误似乎出现在我代码中的以下一行:

page = urllib2.urlopen(url)

其中url显然是一个网址。

而且我的代码中确实有import urllib2这一行。

3 个回答

8

这和Django没有关系,这是urllib2抛出的一个异常,意思是它在获取你的网址后无法解析返回的内容。可能是网络问题,也可能是返回的数据格式不对……有些服务器或应用会随机出现这种错误。如果你不能控制这个网址返回什么内容,那你只能捕捉这个异常,调试一下哪些网址出现了问题,然后试着找出规律。

9

其他用户的解释是对的,也很不错,但在实际操作中你可能会发现这个很有用:
根据我的经验,这种情况通常发生在你向网址参数发送没有加引号的值时,比如那些包含空格或其他需要加引号或进行网址编码的字符的值。

38

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

撰写回答