2014-02-20 28 views
0

我正在使用urllib2來訪問URL並讀取數據。 urlopen電話嘗試除了像下面的塊之外。我在網站上看到其他問題,他們遇到了這個500錯誤,但我無法找到一個具體的答案,爲什麼我們得到這個500例外,即使在通話成功的時候。任何人都可以詳細說明或指出遇到它的方法嗎?urllib2.open即使在調用成功時也給出500個HTTPError異常

  try: 
       data = urllib2.urlopen(url).read().split('\n') 
      except urllib2.HTTPError, e: 
       print "Could not get data with url {0} due to error code {1}.".format(url,e.code) 
      except urllib2.URLError, e: 
       print "Could not get data with url {0} due to reason {1}.".format(url,e.reason) 
       sys.exit(1) 

回答

1

HTTP錯誤500是服務器錯誤(https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。您應該調查服務器端日誌

+0

我知道500錯誤是服務器端,但我問我在我的問題是即使URL調用成功時出現錯誤。假設我正在訪問一個api,但是我的上面的嘗試除了block之外,數據進入** data **對象,即使這樣500錯誤也出現了。我正在尋找答案,以獲得比500錯誤代碼更好的故障診斷數據。 – ash

+0

我看到了您的原始評論(關於仍在獲取數據) - 我試圖提出的一點是服務器告訴您關於請求失敗的一些信息。最後可能是正確的 - 但服務器肯定遇到了內部錯誤。我懷疑有沒有進一步的情報可以從客戶端收集而不檢查服務器日誌,除非您可以通過仔細檢查數據恢復來確定服務器狀態 - 我認爲這是可能的。如果你想走這條路。對不起,我無法提供更多幫助。 – user590028

0

您正在收到服務器端錯誤。

您需要檢查錯誤(e)以查看是否有任何反饋。它通常有一些來自服務器的實際錯誤數據。不是所有的服務器都會返回錯誤數據,有時它只是在服務器日誌上。

如果這是在守護進程上運行,或者偶爾發生,你可以寫一些記錄e內容的地方。您可以使用pdb.set_trace()來設置斷點並自行檢查對象。

也,而這一行看起來不錯:

data = urllib2.urlopen(url).read().split('\n') 

它的調試和故障排除過程中一個真正的痛苦,使用的urllib時發生了很多。

我建議,如果你在幾個斷點與pdbpdb.set_trace())進入它分成幾行這樣

url_obj = urllib2.urlopen(url) 
data = url_obj.read() 
data = data.split('\n') 

你就可以,而不是每個變量。

因爲您沒有使用自定義開啓器,所以我也只是使用requests庫,它只是包裝urllib並使其更不可怕。

相關問題