title: How to catch timeout error with urllib
body: <p>I am struggling with try and except with python 3</p>
  
  <p>I could catch the HTTPError(Bad Request) and URLError(no host/route name found) </p>
  
  <p>However I couldn't catch the timeout error yet.</p>
  
  <pre><code> while True:
          try:
              f = urllib.request.urlretrieve(url,csvname)
          except urllib.error.HTTPError as e: #
              print(str(chl) + " Error:" + str(e))
  
  
              continue
          except urllib.error.URLError as e: 
              continue
          except socket.timeout as e:
              #I can't catch time out error here
              continue
  </code></pre>
  
  <p>it returns this.</p>
  
  <p>How can I prevent the script from stopping with timeout error?</p>
  
  <pre><code>Traceback (most recent call last):
    File "wisdom2.py", line 84, in &lt;module&gt;
      f = urllib.request.urlretrieve(url,csvname)
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 186, in urlretrieve
      with contextlib.closing(urlopen(url, data)) as fp:
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 161, in urlopen
      return opener.open(url, data, timeout)
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 464, in open
      response = self._open(req, data)
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 482, in _open
      '_open', req)
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 442, in _call_chain
      result = func(*args)
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 1211, in http_open
      return self.do_open(http.client.HTTPConnection, req)
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/urllib/request.py", line 1186, in do_open
      r = h.getresponse()
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/http/client.py", line 1227, in getresponse
      response.begin()
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/http/client.py", line 386, in begin
      version, status, reason = self._read_status()
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/http/client.py", line 348, in _read_status
      line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
    File "/Users/whitebear/.pyenv/versions/3.4.6/lib/python3.4/socket.py", line 378, in readinto
      return self._sock.recv_into(b)
  TimeoutError: [Errno 60] Operation timed out
  
       except socket.timeout as e:
  NameError: name 'socket' is not defined
  </code></pre>