如何捕获Boto3中的botocore.errorfactory.DBInstanceNotFoundFault错误
解决AWS RDS DBInstanceNotFoundFault错误的捕获问题
我来帮你搞定这个错误捕获的问题。你遇到的DBInstanceNotFoundFault其实是botocore.exceptions.ClientError的一个具体实例,我们可以通过两种实用方式来捕获它:
方法1:直接捕获特定错误类
首先确保正确导入对应错误类,然后在try-except块里精准捕获DBInstanceNotFoundFault:
import boto3 import botocore.exceptions from botocore.errorfactory import DBInstanceNotFoundFault clientrds = boto3.client('rds') rdsInstances = ['prod-rds'] for rds in rdsInstances : try: rds_response = clientrds.describe_db_instances(DBInstanceIdentifier=rds) DBInstanceStatus = rds_response["DBInstances"][0]["DBInstanceStatus"] if DBInstanceStatus == "stopped" : print(f"{rds} Switched On") start_rds_response = clientrds.start_db_instance(DBInstanceIdentifier=rds) except DBInstanceNotFoundFault as e: print(f"RDS实例 {rds} 不存在:{e}") # 可选:兜底捕获其他AWS客户端错误 except botocore.exceptions.ClientError as e: print(f"其他AWS操作错误:{e}")
方法2:捕获通用ClientError并判断错误代码
如果担心特定错误类的导入或版本兼容问题,更通用的方式是捕获ClientError后,通过错误代码来识别具体问题:
import boto3 import botocore.exceptions clientrds = boto3.client('rds') rdsInstances = ['prod-rds'] for rds in rdsInstances : try: rds_response = clientrds.describe_db_instances(DBInstanceIdentifier=rds) DBInstanceStatus = rds_response["DBInstances"][0]["DBInstanceStatus"] if DBInstanceStatus == "stopped" : print(f"{rds} Switched On") start_rds_response = clientrds.start_db_instance(DBInstanceIdentifier=rds) except botocore.exceptions.ClientError as e: error_code = e.response['Error']['Code'] if error_code == 'DBInstanceNotFound': print(f"RDS实例 {rds} 不存在:{e}") else: # 按需处理其他类型的AWS错误 print(f"发生未预期的AWS操作错误:{e}")
关键说明
- 必须把可能抛出错误的
describe_db_instances调用放在try块内,这样实例不存在的异常才能被及时捕获。 - 两种方法都能解决你的问题,第二种更灵活,可在同一个
except块内处理多种AWS错误类型。 - 我还把你代码里的转义引号改成了正常双引号,并用f-string优化了打印语句,让代码更易读。
内容的提问来源于stack exchange,提问作者praveen
相关产品推荐
相关产品推荐

