2012-01-06 13 views
8

सबसे पहले, मेरी समस्या this one के समान है। मुझे urllib.urlopen() का एक टाइमआउट चाहिए जो एक अपवाद उत्पन्न करने के लिए है जिसे मैं संभाल सकता हूं।पायथन 3 में urllib के टाइमआउट को कैसे संभालें?

क्या यह URLError के अंतर्गत नहीं आता है?

try: 
    response = urllib.request.urlopen(url, timeout=10).read().decode('utf-8') 
except (HTTPError, URLError) as error: 
    logging.error(
     'Data of %s not retrieved because %s\nURL: %s', name, error, url) 
else: 
    logging.info('Access successful.') 

त्रुटि संदेश:।

resp = urllib.request.urlopen (अनुरोध, टाइमआउट = 10) .read() को डिकोड ('utf-8')
फ़ाइल "/ usr urlopen
वापसी opener.open (url, डेटा, टाइमआउट)
फ़ाइल "/usr/lib/python3.2/urllib/request.py फ़ाइल में /lib/python3.2/urllib/request.py", लाइन 138, ", लाइन 36 9, खुले
प्रतिक्रिया = self._open (req, डेटा)
फ़ाइल" _usen/lib/python3.2/urllib/request.py ", लाइन 387, _open
'_open', req)
फ़ाइल" /usr/lib/python3.2/urllib/request.py ", लाइन 347, _call_chain
परिणाम = समारोह में (* args)
फ़ाइल "/usr/lib/python3.2/urllib/request.py", लाइन 1156, http_open
वापसी self.do_open में (http.client.HTTPConnection , अनुरोध)
फ़ाइल "/usr/lib/python3.2/urllib/request.py", लाइन 1141, do_open
r = h.getresponse में()
फ़ाइल "/usr/lib/python3.2/ http/client.py ", लाइन 1046, getresponse
फिर से sponse.begin()
फ़ाइल "/usr/lib/python3.2/http/client.py", लाइन 346, में
संस्करण, स्थिति, कारण = self._read_status()
फ़ाइल "/ usr/शुरू lib/python3.2/http/client.py ", लाइन 308, _read_status
लाइन = str (self.fp.readline (_MAXLINE + 1)," आईएसओ -885 9 -1 ")
फ़ाइल"/usr/lib/python3.2/socket.py ", लाइन 276, readinto
वापसी self._sock.recv_into में (ख)
socket.timeout: टाइम आउट हो गया

एक प्रमुख चा था पायथन 3 में से nge जब उन्होंने urllib और urllib2 मॉड्यूल को urllib में फिर से संगठित किया। क्या यह संभव है कि एक बदलाव आया जिससे इसका कारण बनता है?

+0

अपवाद प्रकारों को खोजने का एक आसान तरीका है 'अपवाद को छोड़कर ई: प्रिंट (प्रकार (ई)) ' । मान लीजिए कि आप अपने अपवादों को पुन: पेश कर सकते हैं, यानी। – polvoazul

उत्तर

18

अपवाद सॉकेट से टाइमआउट है, इसलिए

from socket import timeout 
try: 
    response = urllib.request.urlopen(url, timeout=10).read().decode('utf-8') 
except (HTTPError, URLError) as error: 
    logging.error('Data of %s not retrieved because %s\nURL: %s', name, error, url) 
except timeout: 
    logging.error('socket timed out - URL %s', url) 
else: 
    logging.info('Access successful.') 

नया अपवाद को पकड़ने चाहिए। हालांकि मुझे यकीन नहीं है कि क्या यह आपके प्रश्न का उत्तर देता है, क्योंकि मुझे यकीन नहीं है कि आपका प्रश्न क्या है ..

संबंधित मुद्दे