據the urllib2 documentation,爲什麼Python的urllib2.urlopen()爲成功的狀態代碼引發HTTPError?
因爲默認的處理程序處理重定向(在300範圍內的代碼),並在100-299範圍內的代碼表示成功,你通常只會看到在400-599範圍內的錯誤代碼。
然而下面的代碼
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
引發引發HTTPError代碼爲201(創建):
ERROR 2011-08-11 20:40:17,318 __init__.py:463] HTTP Error 201: Created
那麼,爲什麼urllib2
扔HTTPErrors這個成功的請求?
這不是太痛苦;我可以很容易的代碼擴展到:
try:
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
except HTTPError, e:
if e.code == 201:
# success! :)
else:
# fail! :(
else:
# when will this happen...?
但這似乎像預期的行爲不基於文檔和事實,我無法找到關於這個奇怪的行爲類似的問題上。
此外,又該else
塊期待?如果成功的狀態碼都解釋爲HTTPError
s,則什麼時候urllib2.urlopen()
只返回一個正常的文件樣反應的物體,像所有的urllib2
文件指的是?
這真是不同尋常看到201-299之間的響應碼。沒有感到意外,urllib2並沒有完全處理它們。 – Leopd
我錯過了什麼嗎? 201對我來說很好...... – Santa
@Santa,根據dcrosta的回答,也許你正在使用非標準的處理程序? – rubergly