,क्यों पायथन के urllib2.urlopen() सफल स्थिति कोड के लिए बढ़ा है एक HTTPError?
क्योंकि डिफ़ॉल्ट हैंडलर 100-299 रेंज में रीडायरेक्ट (300 रेंज में कोड), और कोड संभाल सफलता से संकेत मिलता है, तो आप आमतौर पर केवल 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
@ सांता, शायद आप एक गैर मानक हैंडलर का उपयोग कर रहे हैं, डीसीआरओस्टा के जवाब के अनुसार? – rubergly