处理 python 字典中丢失的键

Handle missing keys in python dictionary

我正在 Amazon 中构建 EC2 实例列表。我正在测试字典中是否存在名为 PrivateIpAddress 和 PublicIpAddress 的键。在某些情况下,两个键都不存在,我得到一个例外:

-------------------------------------
Instance ID: i-86533615
Type: m4.xlarge
State: stopped
Private IP: 10.1.233.18
Traceback (most recent call last):
  File ".\aws_ec2_list_instances.py", line 43, in <module>
    print(Fore.CYAN + "{0}: {1}".format(key, instance[key]))
KeyError: 'Public IP'

我的代码是这样的:

for instance in reservation["Instances"]:
if 'PrivateIpAddress' in instance and 'PublicIpAddress' in instance:
    ... do stuff...
elif 'PrivateIpAddress' in instance:
else:
    ...do stuff..

但是最后一个 else 并没有发现实例没有 public ip 地址或私有 ip 地址的问题。

下面是 python 中的完整代码:list ec2 instances

for instance in reservation.get("Instances", []):
    private_ip_address = instance.get("PrivateIpAddress" , None)
    public_ip_address = instance.get("PublicIpAddress" , None)
    if  private_ip_address and public_ip_address:
    ... do stuff...
    elif private_ip_address:
       ...do stuff.. 
    else:
       ...do stuff..

试试这个

我发现你的逻辑存在根本性问题。您正在遍历所有实例并在 ec2info 中为每个实例构建映射。但是每次通过循环,在处理特定实例时,您都会遍历 ec2info 中的所有数据,包括之前循环迭代添加的数据。我打赌你真的不想这样做。我敢打赌您真的只想显示您正在处理的实例的属性。

这是您的问题的关键:

attributes = ['Instance ID', 'Type',
    'State', 'Private IP', 'Launch Time' ]
for instance_id, instance in ec2info.items():

所以在这里,您正在遍历 ec2info 中的所有地图,但您正在应用一组特定于一个实例的 'attributes'您目前正在处理。因为一般来说,根据您自己的代码,并非 ec2info 中的所有地图都具有所有相同的键,您会得到您遇到的错误。