通过本文您可以了解SDK的错误处理方式、异常分类以及重试策略。
错误处理方式
智能媒体管理的SDK目前采用“异常”的方式处理错误,如果调用接口没有抛出异常,则说明操作成功,否则失败。
异常分类
异常由SDK定义,用于处理服务自身逻辑错误的异常。SDK可能出现的异常包括如下几类:
由服务端返回的错误或者SDK向服务端发出请求时网络错误(例如网络连接不通、服务端返回超时等)
该类错误由SDK处理并包装在统一的异常类抛出给用户处理。关于此类错误的更多信息请参见通用错误码和各个API接口的错误码。返回的错误格式如下:
错误代码(Error Code):如果错误是服务端返回的错误,则错误代码与API返回的错误代码一致;如果错误是SDK网络请求错误,则错误代码为“RequestError”。
错误消息(Error Message):如果错误是服务端返回的错误,则错误消息与API返回的错误消息一致;如果错误是SDK网络请求错误,则错误消息为“request is failed.”。
错误请求ID(Request Id):当前错误对应于服务端的请求ID。该请求ID只有在服务端返回错误消息时有效,否则为空字符串。当遇到错误请求时,请联系我们。
由SDK自身产生的与平台及语言相关的错误(例如内存溢出等)
该类错误SDK不会处理,直接抛出平台及语言的Native Exception类给用户处理。
重试策略
使用SDK访问服务端时可能会由于网络临时中断、传输延时过长、服务端处理过慢等原因导致请求失败。目前此类错误均直接以异常抛出,服务内部并未对此做任何重试逻辑。所以您需要在使用SDK时自定义相应的处理逻辑,例如重试请求或者直接报错等。
如下为错误处理的示例代码。
@staticmethod
def test_get_project() -> None:
# 填写项目名称。
project_name = "myproject1"
# 创建项目。
client = Sample.create_client("imm_access_key_id", "imm_access_key_secret")
create_project_request = imm_20200930_models.CreateProjectRequest(
# 填写IMM项目名称。
project_name=project_name,
# 填写服务角色。
service_role='AliyunIMMDefaultRole'
)
runtime = util_models.RuntimeOptions()
response = client.create_project_with_options(create_project_request, runtime)
assert response.body.project.project_name == project_name
# 获取项目。
get_project_request = imm_20200930_models.GetProjectRequest(project_name='myproject1-2')
runtime = util_models.RuntimeOptions()
try:
# 打印API的返回值。
response = client.get_project_with_options(get_project_request, runtime)
print(response.body.to_map())
except Exception as error:
# 如有需要,请打印错误信息。
UtilClient.assert_as_string(error.message)
assert error.code == "ResourceNotFound"
文档内容是否对您有帮助?