Google 工作表 API:异常与响应正文中的 Json
Google Sheets API: Exception vs. Json in response body
我迷失在 Google 工作表 API 的错误处理中。
Sheets API reference page 没有提供任何错误处理示例。
这个 指向一个文档页面说:
The Drive API returns two levels of error information:
HTTP error codes and messages in the header.
A JSON object in the response body with additional details that can help you determine how > to handle the error.
Drive apps should catch and handle all errors that might be encountered when using the REST > API. This guide provides instructions on how to resolve specific API errors.
然后列出 json 对 404
的响应示例
然而,当我 运行 使用不存在的 spreadsheet_id 以下代码时(它在正确的 spreadsheet_id 上工作正常):
request = service.spreadsheets().get(
spreadsheetId=spreadsheet_id,
ranges=ranges,
)
response = request.execute()
我在 json 响应中得到一个异常,而不是错误:
File ".../lib/python3.8/site-packages/googleapiclient/http.py", line 915, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 404 when requesting https://sheets.googleapis.com/v4/spreadsheets/1Z2aQvO122lBxHyditlDT6KhSAqkiUeX8zqJ4ysIJHd?alt=json returned "Requested entity was not found.". Details: "Requested entity was not found.">
似乎我什至无法在不解析字符串的情况下提取错误代码。
那么,问题来了:如何正确处理表单api错误?我想我更愿意总是得到一个 json 并捕获真正的技术错误的异常,例如连接不良等
提前致谢!
“未找到请求的实体”错误通常是由于发送了无效的传播sheetId。
您应该首先检查您已通过身份验证的用户是否确实可以访问 sheet。做一个 file.list 并搜索 sheet 的 mime 类型将是一个很好的方法 try me
我认为您的目标和现状如下。
- 当工作表 API 发生错误时,您想从工作表 API 中检索错误消息作为 JSON 数据。
- 您想使用带有 python 的 googleapis 来实现此目的。
- 您已经能够通过 googleapis python 使用 Google 表格 API。
这样的话,用try,except怎么样?示例脚本如下
示例脚本:
from googleapiclient.errors import HttpError # <--- In this case, please add this.
try:
# This is your script.
request = service.spreadsheets().get(
spreadsheetId=spreadsheet_id,
ranges=ranges,
)
response = request.execute()
print(response)
except HttpError as err:
e = json.loads(err.content.decode("utf-8"))
print(e)
在这个示例脚本中,当spreadsheet_id
为有效值时,返回值可以用print(response)
看到。当spreadsheet_id
为无效值时,错误信息可以用print(e)
看到。 print(e)
的样本值如下
{'error': {'status': 'NOT_FOUND', 'message': 'Requested entity was not found.', 'code': 404, 'errors': [{'domain': 'global', 'message': 'Requested entity was not found.', 'reason': 'notFound'}]}}
注:
- 在此示例脚本中,假设您的
service
可用于使用表格 API 从 Google 电子表格中检索值。请注意这一点。
参考:
我迷失在 Google 工作表 API 的错误处理中。
Sheets API reference page 没有提供任何错误处理示例。
这个
The Drive API returns two levels of error information:
HTTP error codes and messages in the header.
A JSON object in the response body with additional details that can help you determine how > to handle the error.
Drive apps should catch and handle all errors that might be encountered when using the REST > API. This guide provides instructions on how to resolve specific API errors.
然后列出 json 对 404
的响应示例然而,当我 运行 使用不存在的 spreadsheet_id 以下代码时(它在正确的 spreadsheet_id 上工作正常):
request = service.spreadsheets().get(
spreadsheetId=spreadsheet_id,
ranges=ranges,
)
response = request.execute()
我在 json 响应中得到一个异常,而不是错误:
File ".../lib/python3.8/site-packages/googleapiclient/http.py", line 915, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 404 when requesting https://sheets.googleapis.com/v4/spreadsheets/1Z2aQvO122lBxHyditlDT6KhSAqkiUeX8zqJ4ysIJHd?alt=json returned "Requested entity was not found.". Details: "Requested entity was not found.">
似乎我什至无法在不解析字符串的情况下提取错误代码。
那么,问题来了:如何正确处理表单api错误?我想我更愿意总是得到一个 json 并捕获真正的技术错误的异常,例如连接不良等
提前致谢!
“未找到请求的实体”错误通常是由于发送了无效的传播sheetId。
您应该首先检查您已通过身份验证的用户是否确实可以访问 sheet。做一个 file.list 并搜索 sheet 的 mime 类型将是一个很好的方法 try me
我认为您的目标和现状如下。
- 当工作表 API 发生错误时,您想从工作表 API 中检索错误消息作为 JSON 数据。
- 您想使用带有 python 的 googleapis 来实现此目的。
- 您已经能够通过 googleapis python 使用 Google 表格 API。
这样的话,用try,except怎么样?示例脚本如下
示例脚本:
from googleapiclient.errors import HttpError # <--- In this case, please add this.
try:
# This is your script.
request = service.spreadsheets().get(
spreadsheetId=spreadsheet_id,
ranges=ranges,
)
response = request.execute()
print(response)
except HttpError as err:
e = json.loads(err.content.decode("utf-8"))
print(e)
在这个示例脚本中,当
spreadsheet_id
为有效值时,返回值可以用print(response)
看到。当spreadsheet_id
为无效值时,错误信息可以用print(e)
看到。print(e)
的样本值如下{'error': {'status': 'NOT_FOUND', 'message': 'Requested entity was not found.', 'code': 404, 'errors': [{'domain': 'global', 'message': 'Requested entity was not found.', 'reason': 'notFound'}]}}
注:
- 在此示例脚本中,假设您的
service
可用于使用表格 API 从 Google 电子表格中检索值。请注意这一点。