В тропосферном модуле 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" '