【问题标题】:KeyError: 'Load Balancer Addresses'KeyError:“负载平衡器地址”
【发布时间】:2021-06-30 18:46:27
【问题描述】:

我一直在使用 BOTO 3 来描述帐户中可用的所有负载平衡器。我使用了以下sn-p的代码:

'elbv2=boto3.client('elbv2',aws_access_key_id=access_key_id,aws_secret_access_key=secret_key,region_name=region)
response=elbv2.describe_load_balancers()

print(response)

这里的响应存储了 dict 的所有信息,如下所示:

{
    'LoadBalancers': [{
        'LoadBalancerArn': 'arn:aws:elasticloadbalancing:ap-south-1:407203256002:loadbalancer/net/aws-lb-02/9d4b15bfd6f579d3',
        'DNSName': 'aws-lb-02-9d4b15bfd6f579d3.elb.ap-south-1.amazonaws.com',
        'CanonicalHostedZoneId': 'ZVDDRBQ08TROA',
        'CreatedTime': datetime.datetime(2021, 3, 31, 11, 45, 6, 729000, tzinfo = tzutc()),
        'LoadBalancerName': 'aws-lb-02',
        'Scheme': 'internet-facing',
        'VpcId': 'vpc-0be01860',
        'State': {
            'Code': 'active'
        },
        'Type': 'network',
        'AvailabilityZones': [{
            'ZoneName': 'ap-south-1a',
            'SubnetId': 'subnet-ed5fb986',
            'LoadBalancerAddresses': []
        }, {
            'ZoneName': 'ap-south-1b',
            'SubnetId': 'subnet-89d285c5',
            'LoadBalancerAddresses': []
        }]]}"'

我想访问 LoadBalancerAddress ,我试过这样:

LoadBalancers=response['LoadBalancers']
for i in LoadBalancers:
  AvailabilityZones=i['AvailabilityZones']
  for j in AvailabilityZones:
    LoadBalancerAddresses=i['LoadBalancerAddresses']

但是,它会抛出一个错误,提示 LoadBalancerAddresses 存在关键字错误,我无法理解。 请帮助我应该如何访问该变量。

【问题讨论】:

  • A KeyError 当程序在 dict 对象中找不到键时发生。请检查您的所有回复中是否有LoadBalancerAddresses

标签: python boto3 aws-elb


【解决方案1】:

您可以在这里使用嵌套列表推导式,如下所示:

addresses = [x['LoadBalancerAddresses'] for res in aaa['LoadBalancers'] for x in res['AvailabilityZones']]

或使用普通嵌套列表:

addresses = []
for bal in aaa['LoadBalancers']:
    for zones in bal['AvailabilityZones']:
        addresses += zones['LoadBalancerAddresses']

【讨论】:

    【解决方案2】:

    您将j['LoadBalancerAddresses'] 输入错误为i['LoadBalancerAddresses']。由于在response['LoadBalancers'] 下没有直接名为LoadBalancerAddresses 的键,因此您的程序会抛出KeyError

    固定版本:

    LoadBalancers=response['LoadBalancers']
    for i in LoadBalancers:
      AvailabilityZones=i['AvailabilityZones']
      for j in AvailabilityZones:
        LoadBalancerAddresses=j['LoadBalancerAddresses']
    

    作为一种安全选项,最好在访问之前检查密钥是否存在,例如:

    for j in AvailabilityZones:
        if "LoadBalancerAddresses" in j:
            LoadBalancerAddresses=j['LoadBalancerAddresses']
        else:
            print("The key does not exist")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-21
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多