繁体   English   中英

Python AWS boto3 返回 NoneType 错误

[英]Python AWS boto3 returning NoneType Error

我正在尝试使用 boto3 Python 模块在 AWS 账户中枚举一些 EC2 实例详细信息,但我不断收到意外错误。 具体来说,我正在尝试获取与每个实例关联的标签。 这是我的代码的粗略副本:

#!/usr/bin/python3

import boto3
import botocore

boto3_session = create_boto3_session(profile_name='some_profile')
ec2_resource = boto3_session.resource("ec2", region_name='some_region')
ec2_instances = ec2_resource.instances.all()
for ec2_instance in ec2_instances:
    tags = getattr(ec2_instance, 'tags', [])
    for tag in tags:
        print(tag)

当代码运行时,它会按预期打印实例的标签 - 直到找到没有标签的实例,然后我收到错误:

    for tag in tags:
TypeError: 'NoneType' object is not iterable

我不明白为什么 getattr() function 返回一个“NoneType”,而不是像我要求的那样返回一个空列表。 我错过了什么吗?

我想我找到了答案。 它不是特定于 boto3 的。

当您在 object 上调用getattr()时,如果 class 没有实现__getattr__()方法,它似乎只返回一个提供的默认值。 如果它确实具有该方法,那么它将返回__getattr__()中指定的值,无论如何。

在 object 上调用hasattr()似乎也是如此。 如果实现了该方法,它将返回__getattr__()中指定的值。 这有点违反直觉,因为如果__getattr__()方法设置为返回False ,那么为不存在的属性调用hasattr()将返回True

像这样的东西会起作用吗? 我所有的实例都有标签,但我认为如果不存在标签,你会得到一个空列表,所以如果弹出错误,你可能需要检查长度。

for ec2_instance in ec2_instances:
    for tag in ec2_instance.tags:
        print(tag)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM