Ответ 1
BigQuery - это REST API, ошибки, которые он использует, следуют стандартным соглашениям об ошибках HTTP.
В python в HttpError есть поле resp.status, которое возвращает код состояния HTTP. Как показано выше, 409 - это "конфликт", 404 "не найден".
Например:
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
Ответ также является json-объектом, еще лучший способ - проанализировать json и прочитать поле причины ошибки:
if err.resp.get('content-type', '').startswith('application/json'):
reason = json.loads(e.content).reason
Это может быть: notFound, duplicate, accessDenied, invalidQuery, backendError, resourcesExceeded, invalid, quotaExceeded, rateLimitExceeded, timeout и т.д.