diff --git a/tools/upip.py b/tools/upip.py
index db18a7427e9541c7cbe70f1071b4bd7661e7ef44..0070fd61954333b84a85b78b1497f1fd4b21dc3f 100644
--- a/tools/upip.py
+++ b/tools/upip.py
@@ -105,7 +105,10 @@ warn_ussl = True
 def url_open(url):
     global warn_ussl
     proto, _, host, urlpath = url.split('/', 3)
-    ai = usocket.getaddrinfo(host, 443)
+    try:
+        ai = usocket.getaddrinfo(host, 443)
+    except OSError as e:
+        fatal("Unable to resolve %s (no Internet?)" % host, e)
     #print("Address infos:", ai)
     addr = ai[0][4]
 
@@ -124,13 +127,16 @@ def url_open(url):
     l = s.readline()
     protover, status, msg = l.split(None, 2)
     if status != b"200":
+        s.close()
+        exc = ValueError(status)
         if status == b"404":
-            print("Package not found")
-        raise ValueError(status)
+            fatal("Package not found", exc)
+        fatal("Unexpected error querying for package", exc)
     while 1:
         l = s.readline()
         if not l:
-            raise ValueError("Unexpected EOF")
+            s.close()
+            fatal("Unexpected EOF in HTTP headers", ValueError())
         if l == b'\r\n':
             break
 
@@ -144,8 +150,10 @@ def get_pkg_metadata(name):
     return json.loads(s)
 
 
-def fatal(msg):
-    print(msg)
+def fatal(msg, exc=None):
+    print("Error:", msg)
+    if exc and debug:
+        raise exc
     sys.exit(1)
 
 def install_pkg(pkg_spec, install_path):