В тропосферном модуле Python я получаю сообщение об ошибке "AttributeError: объект 'module' не имеет атрибута 'EBSBlockDeviceMapping'"

Я следую примеру другого кода, который был написан. Рассматриваемый код выглядит так:

   if virtualname == "ebs":
        if deviceSize == None:
            deviceSize = 8

            if delOnTerminate == None or delOnTerminate == "true":
                DOT = "true"
            else:
                DOT = "false"

        lc.BlockDeviceMappings.append(ec2.EBSBlockDeviceMapping(
                                            DeviceName=blockname,
                                            Ebs=ec2.EBSBlockDevice(VolumeSize=deviceSize,
                                                                   DeleteOnTermination=DOT)))
    else:
        lc.BlockDeviceMappings.append(ec2.BlockDeviceMapping(DeviceName=blockname,
                                                             VirtualName=virtualname))

2 ответа

AttributeError происходит только тогда, когда у вас есть класс (в данном случае модуль) и вы ссылаетесь на атрибут, который не существует. Это как NameError но для атрибутов объектов.

Вы импортировали модуль как import ... as ec2, Модуль помечен ... не имеет функции с именем EBSBlockDeviceMappingпоэтому, когда вы вызываете это в своем коде, это дает AttributeError,

Вот что работает:

        lc.BlockDeviceMappings.append(ec2.BlockDeviceMapping(
                DeviceName = blockname,
                Ebs=ec2.EBSBlockDevice(
                    VolumeSize = deviceSize,
                    DeleteOnTermination = DOT
                    )
                )
        )

Как указывает Reticality, EBSBlockDeviceMapping не существует. Вместо этого мне просто нужно было использовать BlockDeviceMapping, а ec2.EBSBlockDevice позаботится о настройке EBS.

О да, и аргумент для DOT должен быть логическим, а не строкой, поэтому используйте "DOT = False" и "DOT = True", а не "DOT = "false"и" DOT = "true" '

Другие вопросы по тегам