You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何验证Boto3获取SSM参数时捕获的异常为400状态码?

如何捕获Boto3 SSM参数不存在的400状态码异常

我之前也碰到过这个问题,Boto3抛出的通用异常确实有点棘手,不过咱们可以通过ClientError异常里的响应细节来精准判断!

Boto3的SSM客户端调用get_parameter时,如果目标参数不存在,会抛出botocore.exceptions.ClientError,这个异常对象里包含了完整的API响应信息,我们可以从中提取HTTP状态码和AWS专属的错误代码,来确认是不是我们要找的400错误场景。

具体实现步骤

  1. 先导入需要的异常类:from botocore.exceptions import ClientError
  2. try-except块中捕获ClientError异常
  3. 从异常的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

火山引擎 最新活动