繁体   English   中英

尝试访问字典中的键时始终出现KeyError

[英]Always getting KeyError when trying to access the key in a dictionary

我正在使用AWS的Boto3编写Python脚本来管理安全组。 我创建了一个字典,仅获取组ID及其属性。 我可以访问的性能sg-aaaaaaaa ,但是当我试图访问sg-bbbbbbbb ,它总是抛出一个KeyError

我如何创建字典

def get_rules(sg_ids, region):
    sg_rules = {}
    sg_rules['SecurityGroups'] = []
    ec2 = boto3.client('ec2', region_name=region)

    for sg_id in sg_ids:
        response = ec2.describe_security_groups(
            Filters=[
                {
                    'Name': 'group-id',
                    'Values': [
                        sg_id
                    ]
                }
            ]
        )
        data = response['SecurityGroups'][0]['IpPermissions']

        sg_rules['SecurityGroups'].append({sg_id: data})

    return sg_rules

字典

{'SecurityGroups': [{'sg-aaaaaaaa': [{'FromPort': 22, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': 'XX.XX.XX.XX/32'}], 'Ipv6Ranges': [], 'PrefixListIds': [], 'ToPort': 22, 'U
serIdGroupPairs': []}, {'FromPort': 6556, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': 'XX.XX.XX.XX/32'}], 'Ipv6Ranges': [], 'PrefixListIds': [], 'ToPort': 6556, 'UserIdGroup
Pairs': []}]}, {'sg-bbbbbbbb': [{'FromPort': 61137, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [], 'PrefixListIds': [], 'ToPort': 61137, 'UserIdGro
upPairs': []}, {'FromPort': 3389, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': 'XX.XX.XX.XX/32'}], 'Ipv6Ranges': [], 'PrefixListIds': [], 'ToPort': 3389, 'UserIdGroupPairs':
[]}]}]}

测试

sg_ids = get_sg(cidr, region)
sg_rules = get_rules(sg_ids, region)

print(sg_rules['SecurityGroups'][0]['sg-aaaaaaaa']) # OK
print(sg_rules['SecurityGroups'][0]['sg-bbbbbbbb']) # KeyError

错误

Traceback (most recent call last):
File "aws_sg_test.py", line 135, in <module>
    main()
File "aws_sg_test.py", line 131, in main
    update(args.cidr, args.region)
File "aws_sg_test.py", line 105, in update
    print(sg_rules['SecurityGroups'][0]['sg-bbbbbbbb']) # KeyError
KeyError: 'sg-bbbbbbbb'

您正在访问错误的索引。 这将解决它。

print(sg_rules['SecurityGroups'][1]['sg-bbbbbbbb'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM