列表索引必须是整数或切片,而不是str python3.6

时间:2018-09-14 18:10:22

标签: json amazon-web-services amazon-ec2 python-3.6 boto3

我有一个python脚本,可提取我拥有的所有AWS账户中的所有EC2实例ID和标签。我试图解析一个键的一个值。具体来说,我只想从响应中解析Value Key的{​​{1}},但是却收到错误:email。以下是我的代码和list indices must be integers or slices, not str响应。

json

Code:

import boto3 import json conn = boto3.resource('ec2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, aws_session_token=session_token) instances = conn.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]) for instance in instances: host_list = instance.id host_tags = instance.tags print(host_tags['Key']['email']['Value'])

Sample JSON:

[{ 'Key': 'gitlab', 'Value': 'true' }, { 'Key': 'portfolio', 'Value': 'xxx' }, { 'Key': 'runner-manager-name', 'Value': 'xxxxxx' }, ... ]

Error:

1 个答案:

答案 0 :(得分:3)

您的问题出在线路上

host_tags = instance.tags
print(host_tags['Key']['email']['Value'])

像这样重写它:

host_tags = instance.tags
for tag in host_tags:
    print('Key: ' + tag['Key'] + ' Value: ' + tag['Value'])

instance.tags是字典的数组。您需要处理数组中的每个项目(标签)。然后,您需要处理字典以提取其键/值对。