错误处理

通过本文您可以了解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"