2012-01-04 110 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