【发布时间】:2023-03-22 19:21:01
【问题描述】:
我正在 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 并没有发现实例没有公共 IP 地址或私有 IP 地址的问题。
这里是python中的完整代码:list ec2 instances
【问题讨论】:
-
你可以使用reservation.get("Instances",default value here)。例如
reservation.get("Instances",[]) -
所以,以防万一这是您被难住的地方:您可以添加另一个 elif,它会检查“PublicIpAddress”,您不仅限于 1 个 elif。话虽如此,这可以通过
get或setdefault方法更清晰地完成,如您所见。 -
有几种方法可以处理这个问题。您可以在调用它们之前主动检查字典中的键,方法是执行
if 'Public IP' in instance.keys()之类的操作,或者使用.get并提供默认值,或者,如果您想过度使用,请使用DefaultDict: @ 987654322@ -
您的回溯表明错误在 `print(Fore.CYAN + "{0}: {1}".format(key, instance[key]))` 中,但这不包括在您提供的代码。