title: Check if the internet cannot be accessed in Python
body: <p>I have an app that makes a HTTP GET request to a particular URL on the internet. But when the network is down (say, no public wifi - or my ISP is down, or some such thing), I get the following traceback at <code>urllib2.urlopen</code>:</p>
  
  <pre><code>70, in get
      u = urllib2.urlopen(req)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 126, in urlopen
      return _opener.open(url, data, timeout)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 391, in open
      response = self._open(req, data)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 409, in _open
      '_open', req)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 369, in _call_chain
      result = func(*args)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 1161, in http_open
      return self.do_open(httplib.HTTPConnection, req)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 1136, in do_open
      raise URLError(err)
  URLError: &lt;urlopen error [Errno 8] nodename nor servname provided, or not known&gt;
  </code></pre>
  
  <p>I want to print a friendly error to the user telling him that his network maybe down instead of this unfriendly "nodename nor servname provided" error message. Sure I can catch <code>URLError</code>, but that would catch <em>every</em> url error, not just the one related to network downtime. </p>
  
  <p>I am not a purist, so even an error message like "The server example.com cannot be reached; either the server is indeed having problems or your network connection is down" would be nice. How do I go about selectively catching such errors? (For a start, if DNS resolution fails at <code>urllib2.urlopen</code>, that can be reasonably assumed as network inaccessibility? If so, how do I "catch" it in the except block?)</p>