Eli*_*Eli 17 python google-api google-bigquery
我目前正在使用BigQuery做很多事情,而且我正在使用很多东西try... except....看起来我从BigQuery返回的每个错误都是apiclient.errors.HttpError,但附加了不同的字符串,即:
<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">
其中许多人.现在,我看到处理这些问题的唯一方法是对错误消息运行正则表达式,但这很麻烦,绝对不理想.有没有更好的办法?
Jor*_*ani 21
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
Run Code Online (Sandbox Code Playgroud)
响应也是一个json对象,更好的方法是解析json并读取错误原因字段:
if err.resp.get('content-type', '').startswith('application/json'):
reason = json.loads(err.content).get('error').get('errors')[0].get('reason')
Run Code Online (Sandbox Code Playgroud)
这可以是:notFound,duplicate,accessDenied,invalidQuery,backendError,resourcesExceeded,invalid,quotaExceeded,rateLimitExceeded,timeout等.
Google Cloud现在提供了异常处理程序:
from google.api_core.exceptions import AlreadyExists, NotFound
try:
...
except AlreadyExists:
...
except NotFound:
...
Run Code Online (Sandbox Code Playgroud)
在捕获错误的细节时,这应该被证明更为准确。
请参考此源代码以查找要利用的其他异常:http : //google-cloud-python.readthedocs.io/zh-CN/latest/_modules/google/api_core/exceptions.html
| 归档时间: |
|
| 查看次数: |
11612 次 |
| 最近记录: |