2014-05-30 9 views
10

Obecnie robię wiele rzeczy w BigQuery i używam dużo try... except.... To wygląda prawie każdy błąd wrócę z BigQuery jest apiclient.errors.HttpError, ale z różnych ciągów załączonych do nich, tj .:Jak zarządzać błędami interfejsu Google API w Pythonie

<HttpError 409 when requesting https://www.googleapis.com/bigquery/v2/projects/some_id/datasets/some_dataset/tables?alt=json returned "Already Exists: Table some_id:some_dataset.some_table">

<HttpError 404 when requesting https://www.googleapis.com/bigquery/v2/projects/some_id/jobs/sdfgsdfg?alt=json returned "Not Found: Job some_id:sdfgsdfg">

wśród wielu innych. W tej chwili jedynym sposobem, w jaki radzę sobie z tymi problemami, jest uruchamianie wyrażeń regularnych dotyczących komunikatów o błędach, ale jest to niechlujne i zdecydowanie nie idealne. Czy istnieje lepszy sposób?

+0

Wygląda na to, że wyjątek ma kilka [dodatkowych atrybuty] (https://code.google.com/p/google-api-python-client/source/browse/apiclient/errors.py#35), na których możesz polegać - w szczególności możesz (próbować) parsuj JSON z 'error.content' i pracuj z tym. – mgilson

Odpowiedz

10

BigQuery to interfejs API REST, błędy, które stosuje, są zgodne ze standardowymi konwencjami o błędach HTTP.

W python, HttpError ma pole resp.status, które zwraca kod statusu HTTP. Jak pokazano powyżej, 409 to "konflikt", 404 "nie znaleziono".

Na przykład:

from googleapiclient.errors import HttpError 
try: 
    ... 
except HttpError as err: 
    # If the error is a rate limit or connection error, 
    # wait and try again. 
    if err.resp.status in [403, 500, 503]: 
    time.sleep(5) 
    else: raise 

Odpowiedź jest również obiekt JSON, jeszcze lepszym sposobem jest do analizowania JSON i odczytać pole błędu Powód:

if err.resp.get('content-type', '').startswith('application/json'): 
    reason = json.loads(e.content).reason 

Może to być: notFound, duplicate, accessDenied, invalidQuery, backendError, resourcesEvceeded, invalid, quotaEvceeded, rateLimitExceeded, timeout, itp.

Powiązane problemy