可以忽略KeyError?

时间:2017-01-27 15:31:26

标签: python amazon-web-services aws-sdk boto3

我有一些简单的代码进入aws并抓取一些数据然后将其打印到控制台

mycode的:

import boto3
from pprint import pprint

ec2 = boto3.resource('ec2')
client = boto3.client('ec2')

#This is the VPC ID and Linked Tags
for vpctags in client.describe_vpcs()['Vpcs']: 
    print("VPC ID: ", vpctags['VpcId']) 
    print("Tags: ", vpctags['Tags'])
    for subnet in client.describe_subnets()['Subnets']:
        print("Subnet ID: ", subnet['SubnetId'])
        print("Subnet ID: ", subnet['Tags'])

###############################################

我收到错误,因为我的一个或多个子网没有标记:

  

打印("子网ID:",子网['代码'])KeyError:'标签'

我并不期望每个子网都有标签,所以有没有办法简单地忽略标签的缺失,只打印空或只是继续?

抱歉,如果这听起来像一个愚蠢的问题,我已经搜索了谷歌并发现了一些想法,但它们看起来有点先进,我已经拥有了。

4 个答案:

答案 0 :(得分:8)

是, 你可以替换

print("Subnet ID: ", subnet['Tags'])

print("Subnet ID: ", subnet.get('Tags', ''))

使用get with允许您在Tags不存在的情况下定义默认值

答案 1 :(得分:4)

抓住KeyError exception

try:
    print("Tags: ", vpctags['Tags'])
except KeyError:
    print("Tags: None")

如果Tags键不存在,则会改为打印“无”。

答案 2 :(得分:2)

比捕获异常要好得多:使用get

print("Tags: ", vpctags.get('Tags',"None"))

答案 3 :(得分:0)

另一种选择:

if 'Tags' in subnet:
  print("Subnet ID: ", subnet['Tags'])