处理 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 中的所有地图都具有所有相同的键,您会得到您遇到的错误。
我正在 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 中的所有地图都具有所有相同的键,您会得到您遇到的错误。