title: Python try/except not catching exception with requests.get()
body: <p>I'm using Python 3.4 on a Raspberry Pi to upload weather data to a website. Sometime there's a problem uploading (slow Internet or something) and my program crashes. I'm using try/except, but for some reason it's not catching the error. I thought the the last except statement should catch any other errors.</p>
  
  <p>Here's the error:</p>
  
  <pre><code>Traceback (most recent call last):
    File "/usr/local/lib/python3.4/dist-packages/urllib3/connectionpool.py", line 343, in _make_request
      self._validate_conn(conn)
    File "/usr/local/lib/python3.4/dist-packages/urllib3/connectionpool.py", line 839, in _validate_conn
      conn.connect()
    File "/usr/local/lib/python3.4/dist-packages/urllib3/connection.py", line 344, in connect
      ssl_context=context)
    File "/usr/local/lib/python3.4/dist-packages/urllib3/util/ssl_.py", line 344, in ssl_wrap_socket
      return context.wrap_socket(sock, server_hostname=server_hostname)
    File "/usr/lib/python3.4/ssl.py", line 364, in wrap_socket
      _context=self)
    File "/usr/lib/python3.4/ssl.py", line 577, in __init__
      self.do_handshake()
    File "/usr/lib/python3.4/ssl.py", line 804, in do_handshake
      self._sslobj.do_handshake()
  socket.timeout: _ssl.c:584: The handshake operation timed out
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "/usr/local/lib/python3.4/dist-packages/requests/adapters.py", line 449, in send
      timeout=timeout
    File "/usr/local/lib/python3.4/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
      _stacktrace=sys.exc_info()[2])
    File "/usr/local/lib/python3.4/dist-packages/urllib3/util/retry.py", line 367, in increment
      raise six.reraise(type(error), error, _stacktrace)
    File "/usr/local/lib/python3.4/dist-packages/urllib3/packages/six.py", line 686, in reraise
      raise value
    File "/usr/local/lib/python3.4/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
      chunked=chunked)
    File "/usr/local/lib/python3.4/dist-packages/urllib3/connectionpool.py", line 346, in _make_request
      self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
    File "/usr/local/lib/python3.4/dist-packages/urllib3/connectionpool.py", line 306, in _raise_timeout
      raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
  urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='rtupdate.wunderground.com', port=443): Read timed out. (read timeout=5)
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "/home/pi/Weather_Station/WU_upload.py", line 52, in upload2WU
      r = requests.get(full_URL, timeout=5) # send data to WU
    File "/usr/local/lib/python3.4/dist-packages/requests/api.py", line 75, in get
      return request('get', url, params=params, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests/api.py", line 60, in request
      return session.request(method=method, url=url, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests/sessions.py", line 533, in request
      resp = self.send(prep, **send_kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests/sessions.py", line 646, in send
      r = adapter.send(request, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/requests/adapters.py", line 529, in send
      raise ReadTimeout(e, request=request)
  requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='rtupdate.wunderground.com', port=443): Read timed out. (read timeout=5)
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "/home/pi/Weather_Station/Weather_Station.py", line 381, in &lt;module&gt;
      uploadStatus = WU_upload.upload2WU(suntec, WU_STATION)
    File "/home/pi/Weather_Station/WU_upload.py", line 65, in upload2WU
      except requests.exceptions.NewConnectionError:
  AttributeError: 'module' object has no attribute 'NewConnectionError'
  &gt;&gt;&gt; 
  </code></pre>
  
  <p>Here's my code:</p>
  
  <pre><code>try:
      r = requests.get(full_URL, timeout=5) # send data to WU
  
      # If uploaded successfully, website will reply with 200
      if r.status_code == 200:
          return(True)
      else:
          print('Upload Error: {}  {}'.format(r.status_code, r.text))
          return(False)
  
  except requests.exceptions.ConnectionError:
      print("Upload Error in upload2WU() - ConnectionError")
      return(False)
  
  except requests.exceptions.NewConnectionError:
      print("Upload Error in upload2WU() - NewConnectionError")
      return(False)
  
  except requests.exceptions.ReadTimeout:
      print("Upload Error in upload2WU() - ReadTimeout")
      return(False)
  
  except requests.exceptions.MaxRetryError:
      print("Upload Error in upload2WU() - MaxRetryError")
      return(False)
  
  except socket.gaierror:
      print("Upload Error in upload2WU() - socket.gaierror")
      return(False)
  
  except:
      print("Upload Error in upload2WU() - other")
      return(False)
  </code></pre>