异常处理
本节主要介绍V2.0 SDK 的异常种类以及对于异常的处理。
异常种类
异常种类 | 说明 | 异常处理建议 |
UnretryableException | 网络问题造成的异常,一般是网络问题造成达到最大重试次数后抛出。 |
|
ClientException | 客户端异常,HTTP状态码范围在400-499之间,例如请求参数错误、认证失败、权限不足等。 | 在OpenAPI错误诊断中,复制异常中的 |
ServerException | 服务端异常,HTTP状态码范围在500至599之间,指的是阿里云出现的服务端问题,例如服务器内部错误、服务不可用等情况。 | 请尝试进行重试。如若经过多次重试仍无法解决问题,请联系我们寻求帮助。 |
ThrottlingException | 限流异常,当API调用触发阿里云限流机制时抛出。 | 请根据API文档中的限流说明,适当调整API调用的频率。 |
其中ClientException、ServerException和ThrottlingException提供了以下参数,协助您进行问题排查:
request_id:本次请求唯一标识符。
status_code:OpenAPI返回的HTTP状态码。
code:OpenAPI报错的错误码。
message:OpenAPI报错的错误信息。
data:OpenAPI报错后服务端返回的详细信息。
示例代码:
示例中仅做打印展示。请重视异常处理,切勿在项目中直接忽略异常。建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。
import os
from alibabacloud_ecs20140526.client import Client
from alibabacloud_ecs20140526.models import DescribeImagesRequest
from alibabacloud_tea_openapi.exceptions import (
ClientException,
ServerException,
ThrottlingException
)
from alibabacloud_tea_openapi.models import Config
from darabonba.exceptions import UnretryableException
'''云服务器示例'''
# 初始化Config
config = Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
region_id='<REGION_ID>'
)
try:
client = Client(config)
# 初始化Request
request = DescribeImagesRequest(image_id='<IMAGE_ID>', region_id='<REGION_ID>')
response = client.describe_images(request)
except UnretryableException as e:
# 网络异常,此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
print(e)
except (ClientException, ServerException, ThrottlingException) as e:
# 客户端异常,此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
print(f"RequestId:{e.request_id},StatusCode:{e.status_code},Message:{e.message},Data:{e.data}")
解决异常
在调用API的过程中出现异常时,您可以通过以下方式获取帮助:
在OpenAPI错误诊断中复制异常中的RequestId进行异常诊断,获取异常产生的原因及其解决方案。更多信息,请参见OpenAPI错误诊断。
根据异常中的错误码,请在相应产品的帮助中心文档中查找解决方案。例如,关于云服务器ECS的错误码,请参见公共错误码。
在常见问题中查看是否有对应的解决方案。
联系我们协助解决。