如何验证Boto3获取SSM参数时捕获的异常为400状态码?
如何捕获Boto3 SSM参数不存在的400状态码异常
我之前也碰到过这个问题,Boto3抛出的通用异常确实有点棘手,不过咱们可以通过ClientError异常里的响应细节来精准判断!
Boto3的SSM客户端调用get_parameter时,如果目标参数不存在,会抛出botocore.exceptions.ClientError,这个异常对象里包含了完整的API响应信息,我们可以从中提取HTTP状态码和AWS专属的错误代码,来确认是不是我们要找的400错误场景。
具体实现步骤
- 先导入需要的异常类:
from botocore.exceptions import ClientError - 在
try-except块中捕获ClientError异常 - 从异常的
response属性里提取状态码和错误代码,做针对性判断
示例代码
import boto3 from botocore.exceptions import ClientError # 初始化SSM客户端 ssm_client = boto3.client('ssm') try: # 尝试获取不存在的参数 param_value = ssm_client.get_parameter(Name="my-non-existent-param")['Parameter']['Value'] except ClientError as e: # 从异常中提取响应数据 error_details = e.response # 获取HTTP状态码 http_status_code = error_details['ResponseMetadata']['HTTPStatusCode'] # 获取AWS错误代码(参数不存在对应的专属代码是ParameterNotFound) aws_error_code = error_details['Error']['Code'] # 验证是否是参数不存在导致的400错误 if http_status_code == 400 and aws_error_code == "ParameterNotFound": print("确认是参数不存在引发的400错误,执行对应处理逻辑") # 在这里添加你需要的业务逻辑,比如创建参数、返回默认值等 else: # 处理其他类型的错误 print(f"遇到其他错误:状态码{http_status_code},错误代码{aws_error_code}") raise # 或者根据需求自行处理其他异常
小提醒
虽然你重点关注400状态码,但结合AWS的错误代码ParameterNotFound一起判断会更可靠。因为400状态码可能对应多种错误场景(比如参数名称格式不合法),而ParameterNotFound是AWS专门用来标识参数不存在的错误代码,这样能避免误判其他400类型的错误。
内容的提问来源于stack exchange,提问作者Vishal




