kenwynejohnes
kenwynejohnes

Reputation: 53

Google API HTTP exception handling doesn't work (python)

I am trying to catch HTTP errors. I used following options: 1) googleapiclient.errors.HttpError 2) google.api_core.exceptions.NotFound

Neither of these options work for me. Any ideas why? Thank you!

from pprint import pprint

from googleapiclient import discovery, errors
from oauth2client.client import GoogleCredentials
#from google.api_core.exceptions import NotFound

credentials = GoogleCredentials.get_application_default()

service = discovery.build('compute', 'v1', credentials=credentials)

# Project ID for this request.
project = 'aweqwfnwrueifubwerfbiu'  # TODO: Update placeholder value.

try:
    request = service.firewalls().list(project=project)
except errors.HttpError:
    pprint('Error!')

while request is not None:
    response = request.execute()

    for firewall in response['items']:
        # TODO: Change code below to process each `firewall` resource:
        pprint(firewall)

    request = service.firewalls().list_next(previous_request=request, previous_response=response)

Traceback (most recent call last):
  File "test.py", line 20, in <module>
    response = request.execute()
  File "/lib/python3.6/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/lib/python3.6/site-packages/googleapiclient/http.py", line 856, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 404 when requesting https://compute.googleapis.com/compute/v1/projects/aweqwfnwrueifubwerfbiu/global/firewalls?alt=json returned "The resource 'projects/aweqwfnwrueifubwerfbiu' was not found">

Upvotes: 1

Views: 2115

Answers (1)

Meshi
Meshi

Reputation: 502

Try this for handling the error

from googleapiclient.errors import HttpError

However, the error doesn't appear to be raising where your exception catch is. It's here

while request is not None:
    response = request.execute()

Not here

try:
    request = service.firewalls().list(project=project)
except errors.HttpError:
    pprint('Error!')

So try changing it to this

while request is not None:
    try:
        response = request.execute()
    except errors.HttpError:
        pprint('Error!')

Upvotes: 2

Related Questions