boto3 无法在响应条件下执行

boto3 not able to perform if condition on response

我正在尝试 describe_alarms 通过 boto3 sdk 为我的 aws 帐户使用。

当我尝试执行 if 条件响应但它不起作用时,

代码:-

for i in alarm['MetricAlarms']:
  if i['MetricName] == 'Myalarm':
     print(i[AlarmName])
     print("done")

o/p :- 完成,而不是关联的警报名称

上面的代码将解析下面的响应

{
'MetricAlarms': [
    {
        'AlarmName': 'string',
        'AlarmArn': 'string',
        'AlarmDescription': 'string',
        'AlarmConfigurationUpdatedTimestamp': datetime(2015, 1, 1),
        'ActionsEnabled': True|False,
        'OKActions': [
            'string',
        ],
        'AlarmActions': [
            'string',
        ],
        'InsufficientDataActions': [
            'string',
        ],
        'StateValue': 'OK'|'ALARM'|'INSUFFICIENT_DATA',
        'StateReason': 'string',
        'StateReasonData': 'string',
        'StateUpdatedTimestamp': datetime(2015, 1, 1),
        'MetricName': 'string',
        'Namespace': 'string',
        'Statistic': 'SampleCount'|'Average'|'Sum'|'Minimum'|'Maximum',
        'ExtendedStatistic': 'string',
        'Dimensions': [
            {
                'Name': 'string',
                'Value': 'string'
            },
        ],
        'Period': 123,
        'Unit': 'Seconds'|'Microseconds'|'Milliseconds'|'Bytes'|'Kilobytes'|'Megabytes'|'Gigabytes'|'Terabytes'|'Bits'|'Kilobits'|'Megabits'|'Gigabits'|'Terabits'|'Percent'|'Count'|'Bytes/Second'|'Kilobytes/Second'|'Megabytes/Second'|'Gigabytes/Second'|'Terabytes/Second'|'Bits/Second'|'Kilobits/Second'|'Megabits/Second'|'Gigabits/Second'|'Terabits/Second'|'Count/Second'|'None',
        'EvaluationPeriods': 123,
        'DatapointsToAlarm': 123,
        'Threshold': 123.0,
        'ComparisonOperator': 'GreaterThanOrEqualToThreshold'|'GreaterThanThreshold'|'LessThanThreshold'|'LessThanOrEqualToThreshold',
        'TreatMissingData': 'string',
        'EvaluateLowSampleCountPercentile': 'string'
    },
],
'NextToken': 'string'

}

你的问题出在这一行:

print(i[AlarmName])

应该是:

print(i['AlarmName'])

但是,我总是在访问之前检查一个键是否在字典中。如果 API 更改、返回错误等,您的代码将崩溃:

if 'MetricAlarms' in alarm:
  for i in alarm['MetricAlarms']:
    if 'MetricName' in i:
        if i['MetricName] == 'Myalarm':
           print(i['AlarmName'])
           print("done")