We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
AttributeError: url on Storage Exception when key not found
When attempting to get a key that does not exist the exception for the `NotFoundError` is trying to reference `request.url` which does not exist.

``` py
Traceback (most recent call last):
  [...]
    file_key = self.bucket.get_key(path)
  File "gcloud/storage/bucket.py", line 83, in get_key
    response = self.connection.api_request(method='GET', path=key.path)
  File "gcloud/storage/connection.py", line 212, in api_request
    raise exceptions.NotFoundError(response, content)
  File "gcloud/storage/exceptions.py", line 17, in __init__
    self.message = 'GET %s returned a 404.' % (response.url)
  File "httplib2/__init__.py", line 1680, in __getattr__
    raise AttributeError, name
AttributeError: url
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `gcloud/storage/exceptions.py`
Content:
```
1 # TODO: Make these super useful.
2 
3 class StorageError(Exception):
4   pass
5 
6 
7 class ConnectionError(StorageError):
8 
9   def __init__(self, response, content):
10     message = str(response) + content
11     super(ConnectionError, self).__init__(message)
12 
13 
14 class NotFoundError(ConnectionError):
15 
16   def __init__(self, response, content):
17     self.message = 'GET %s returned a 404.' % (response.url)
18 
19 
20 class StorageDataError(StorageError):
21   pass
22
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/gcloud/storage/exceptions.py b/gcloud/storage/exceptions.py
--- a/gcloud/storage/exceptions.py
+++ b/gcloud/storage/exceptions.py
@@ -14,7 +14,7 @@
 class NotFoundError(ConnectionError):
 
   def __init__(self, response, content):
-    self.message = 'GET %s returned a 404.' % (response.url)
+    self.message = 'Request returned a 404. Headers: %s' % (response)
 
 
 class StorageDataError(StorageError):

{"golden_diff": "diff --git a/gcloud/storage/exceptions.py b/gcloud/storage/exceptions.py\n--- a/gcloud/storage/exceptions.py\n+++ b/gcloud/storage/exceptions.py\n@@ -14,7 +14,7 @@\n class NotFoundError(ConnectionError):\n \n   def __init__(self, response, content):\n-    self.message = 'GET %s returned a 404.' % (response.url)\n+    self.message = 'Request returned a 404. Headers: %s' % (response)\n \n \n class StorageDataError(StorageError):\n", "issue": "AttributeError: url on Storage Exception when key not found\nWhen attempting to get a key that does not exist the exception for the `NotFoundError` is trying to reference `request.url` which does not exist.\n\n``` py\nTraceback (most recent call last):\n  [...]\n    file_key = self.bucket.get_key(path)\n  File \"gcloud/storage/bucket.py\", line 83, in get_key\n    response = self.connection.api_request(method='GET', path=key.path)\n  File \"gcloud/storage/connection.py\", line 212, in api_request\n    raise exceptions.NotFoundError(response, content)\n  File \"gcloud/storage/exceptions.py\", line 17, in __init__\n    self.message = 'GET %s returned a 404.' % (response.url)\n  File \"httplib2/__init__.py\", line 1680, in __getattr__\n    raise AttributeError, name\nAttributeError: url\n```\n\n", "before_files": [{"content": "# TODO: Make these super useful.\n\nclass StorageError(Exception):\n  pass\n\n\nclass ConnectionError(StorageError):\n\n  def __init__(self, response, content):\n    message = str(response) + content\n    super(ConnectionError, self).__init__(message)\n\n\nclass NotFoundError(ConnectionError):\n\n  def __init__(self, response, content):\n    self.message = 'GET %s returned a 404.' % (response.url)\n\n\nclass StorageDataError(StorageError):\n  pass\n", "path": "gcloud/storage/exceptions.py"}], "after_files": [{"content": "# TODO: Make these super useful.\n\nclass StorageError(Exception):\n  pass\n\n\nclass ConnectionError(StorageError):\n\n  def __init__(self, response, content):\n    message = str(response) + content\n    super(ConnectionError, self).__init__(message)\n\n\nclass NotFoundError(ConnectionError):\n\n  def __init__(self, response, content):\n    self.message = 'Request returned a 404. Headers: %s' % (response)\n\n\nclass StorageDataError(StorageError):\n  pass\n", "path": "gcloud/storage/exceptions.py"}]}