Python TypeError:字符串索引必须是描述\u vpc\u端点的整数

Python TypeError:字符串索引必须是描述\u vpc\u端点的整数,python,amazon-web-services,typeerror,boto3,amazon-vpc,Python,Amazon Web Services,Typeerror,Boto3,Amazon Vpc,当我运行我的代码时,我得到了错误 TypeError: string indices must be integers 这是我的密码 import boto3 import csv ec2 = boto3.client('ec2') vpcendpoints = ec2.describe_vpc_endpoints(DryRun=False)['VpcEndpoints'] results = list(map(lambda endpoint:(endpoint['VpcEndpoint

当我运行我的代码时,我得到了错误

TypeError: string indices must be integers
这是我的密码

import boto3
import csv

ec2 = boto3.client('ec2')


vpcendpoints = ec2.describe_vpc_endpoints(DryRun=False)['VpcEndpoints']
results = list(map(lambda endpoint:(endpoint['VpcEndpointType'],endpoint['ServiceName'],endpoint['VpcEndpointId'],endpoint['VpcId'],endpoint['DnsEntries'['DnsName']]),vpcendpoints))

for (vpcendpointtype,servicename,vpcendpointid,vpcid,dnsname) in results:
    print (vpcendpointtype+','+ servicename+ ','+ vpcendpointid+ ','+ vpcid+ ','+ dnsname)
我认为问题在于['DnsEntries'['DnsName']]部分,但如何解决这个问题呢

非常感谢你的帮助

打印出切割和空白的整个vpcendpoints

{'VpcEndpointId': 'XXXXXXXXXXX', 'VpcEndpointType': 'Interface', 'VpcId': 'vpc-XXXXXXXXXXXXX', 'ServiceName': 'com.amazonaws.eu-central-1.logs', 
'State': 'available', 'PolicyDocument': '{\n  "Statement": [\n    {\n      "Action": "*", \n      "Effect": "Allow", \n      "Principal": "*", \n      "Resource": "*"\n    }\n  ]\n}', 'RouteTableIds': [], 
'SubnetIds': ['subnet-XXXXXXXXXX', 'subnet-XXXXXXXX', 'subnet-XXXXXXXXX'], 'Groups': [{'GroupId': 'sg-XXXXXXXXXX', 'GroupName': 'XXXXXXXXXX'}], 'PrivateDnsEnabled': True, 'RequesterManaged': False, 'NetworkInterfaceIds': ['eni-XXXXXXXXXX', 'eni-XXXXXXXXX', 'eni-XXXXXXXXXXXX'], 
'DnsEntries': [{'DnsName': 'vpce-XXXXXXXXXXXXX.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXXXX-XXXXXXX-eu-central-1a.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXX-XXXXXXX-eu-central-1b.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXX-XXXXXX-eu-central-1c.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXXXX'}, {'DnsName': 'logs.eu-central-1.amazonaws.com', 'HostedZoneId': 'XXXXXXXXX'}], 
'CreationTimestamp': datetime.datetime(2020, 2, 27, 13, 46, 4, tzinfo=tzutc()), 'Tags': [{'Key': 'Name', 'Value': 'XXXXXXXX'}], 
'OwnerId': 'XXXXXXX'},

你错了

endpoint['DnsEntries'['DnsName']]
DnsEntries是一个数组:

因此,您必须调用它,例如,假设一个长度为1的数组:

endpoint['DnsEntries'][0]['DnsName']]
有效的简化代码:

for endpoint in vpcendpoints:

    print('VPC', endpoint['VpcEndpointType'],
          endpoint['ServiceName'],
          endpoint['VpcEndpointId'],
          endpoint['VpcId'])        

    for dns_entry in endpoint['DnsEntries']:
        print(" - DnsName: " + dns_entry['DnsName'])
示例输出:

VPC Gateway com.amazonaws.us-east-1.dynamodb vpce-032a826a vpc-aabb1122
VPC Interface com.amazonaws.us-east-1.elasticloadbalancing vpce-0f89a33420c1931d7 vpc-1a2b3c4d
 - DnsName: vpce-0f89a33420c1931d7-bluzidnv.elasticloadbalancing.us-east-1.vpce.amazonaws.com
 - DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1b.elasticloadbalancing.us-east-1.vpce.amazonaws.com
 - DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com

你错了

endpoint['DnsEntries'['DnsName']]
DnsEntries是一个数组:

因此,您必须调用它,例如,假设一个长度为1的数组:

endpoint['DnsEntries'][0]['DnsName']]
有效的简化代码:

for endpoint in vpcendpoints:

    print('VPC', endpoint['VpcEndpointType'],
          endpoint['ServiceName'],
          endpoint['VpcEndpointId'],
          endpoint['VpcId'])        

    for dns_entry in endpoint['DnsEntries']:
        print(" - DnsName: " + dns_entry['DnsName'])
示例输出:

VPC Gateway com.amazonaws.us-east-1.dynamodb vpce-032a826a vpc-aabb1122
VPC Interface com.amazonaws.us-east-1.elasticloadbalancing vpce-0f89a33420c1931d7 vpc-1a2b3c4d
 - DnsName: vpce-0f89a33420c1931d7-bluzidnv.elasticloadbalancing.us-east-1.vpce.amazonaws.com
 - DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1b.elasticloadbalancing.us-east-1.vpce.amazonaws.com
 - DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com

Dns条目是一个列表。所以,您需要迭代DNS条目以获取DnsName,而不是将其视为字典

'DnsEntries': [
                {
                    'DnsName': 'string',
                    'HostedZoneId': 'string'
                }
]

Dns条目是一个列表。所以,您需要迭代DNS条目以获取DnsName,而不是将其视为字典

'DnsEntries': [
                {
                    'DnsName': 'string',
                    'HostedZoneId': 'string'
                }
]

感谢您的快速响应,现在我得到以下错误结果=listmaplambda端点:端点['VpcEndpointType'],端点['ServiceName'],端点['VpcEndpointId'],端点['VpcId'],端点['DnsEntries'][0]['DnsName'],vpcendpoints Indexer:列表索引超出range@githubnoobieme也许你没有哨兵?把它们打印出来检查一下。你的问题没有提供这样的信息。我可以在AWS控制台中看到DnsEntries,但我不知道如何打印出来。这就是数组中数组的问题所在。对不起,我只是个傻瓜starting@githubnoobiemeprintvpcendpoints可打印所有内容。您的代码非常复杂,因此一开始可能很难使用。谢谢您的帮助!你是MVP,非常感谢!!!感谢您的快速响应,现在我得到以下错误结果=listmaplambda端点:端点['VpcEndpointType'],端点['ServiceName'],端点['VpcEndpointId'],端点['VpcId'],端点['DnsEntries'][0]['DnsName'],vpcendpoints Indexer:列表索引超出range@githubnoobieme也许你没有哨兵?把它们打印出来检查一下。你的问题没有提供这样的信息。我可以在AWS控制台中看到DnsEntries,但我不知道如何打印出来。这就是数组中数组的问题所在。对不起,我只是个傻瓜starting@githubnoobiemeprintvpcendpoints可打印所有内容。您的代码非常复杂,因此一开始可能很难使用。谢谢您的帮助!你是MVP,非常感谢!!!