2017-01-27 6 views
3

Ich habe eine einfachen Bit-Code, der in aws geht und packt einige Daten druckt sie dann ausmöglich, einen KeyError zu ignorieren?

MyCode zu trösten:

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']) 

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

ich einen Fehler, weil ein oder mehr meine Subnetze nicht tun habe tags:

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

ich bin nicht jedes Subnetz erwartet Tags haben, so ist es eine Möglichkeit, den Mangel an Tags einfach zu ignorieren und einfach leer drucken oder einfach weitergehen?

leid, wenn dies wie eine dumme Frage klingt, habe ich google gesucht und gefunden einige Ideen, aber sie sehen ein wenig fortgeschritten für das, was ich habe.

+0

eine Ausnahme verwenden. –

Antwort

6

Ja, Sie ersetzen

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

mit

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

erhalten Verwendung mit können Sie einen Standardwert für den Fall Schlagwörter definieren ist nicht vorhanden

4

Catch the KeyError exception:

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

Wenn der Tags Schlüssel nicht existiert, wird es stattdessen drucken "None".

1

viel besser als Trapping Ausnahme: get

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

Eine weitere Option:

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