2015-01-21 2 views
0

Я следую примеру другого кода, который был написан. Код в вопросе выглядит следующим образом:В тропосфере модуля 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)) 

ответ

0

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

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

0

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

 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 false '' и 'DOT = "true "