TypeError: неподдерживаемые типы операндов для &: «NoneType» и «BitVector»

вот код питона.

from BitVector import *
MX = BitVector(bitstring = '00011011')
MSB_check = BitVector(bitstring = '10000000')

def multiplication_logic(num):
   num = num.shift_left(1) # left shift
   MSB_num = num & MSB_check # AND num with 1000 0000 to get only MSB
   if MSB_num.intValue() != 0:
      num = num ^ MX #XOR with 00011011
   return num

for indexOfOneInPoly2 in range (0,7):
   if polynomial_2[indexOfOneInPoly2] == 1 and indexOfOneInPoly2 != 0:
      for numberOfIndexTimes in range (0,indexOfOneInPoly2):
         temp = multiplication_logic(polynomial_1)
         print(temp)
   polynomial_3 = polynomial_3 + temp
print(polynomial_3)

Для приведенного выше кода я получаю сообщение об ошибке

Traceback (most recent call last):
  File "<pyshell#126>", line 4, in <module>
    temp = multiplication_logic(polynomial_1)
  File "<pyshell#124>", line 3, in multiplication_logic
    MSB_num = num & MSB_check 
TypeError: unsupported operand type(s) for &: 'NoneType' and 'BitVector'

Как я могу заставить свою функцию принимать параметр как BitVector (поскольку я думаю, что это создает проблему


person Urvah Shabbir    schedule 23.09.2015    source источник
comment
num.shift_left(1) возвращается None   -  person Peter Wood    schedule 23.09.2015


Ответы (1)


Похоже, что метод BitVector.shift_left() возвращает None, предположительно потому, что битовый вектор изменен на месте.

В этом случае нет необходимости переназначать num, просто используйте:

def multiplication_logic(num):
   num.shift_left(1)
   MSB_num = num & MSB_check # AND num with 1000 0000 to get only MSB
   if MSB_num != 0:
      num = num ^ MX #XOR with 00011011
   return num

Если вы используете пакет BitVector, вам необходимо выполнить обновление до версии 3.1 или новее (текущий выпуск это 3.4.4), поскольку в этом выпуске к методам BitVector.shift_left() и BitVector.shift_right() добавлено return self.

Из журнала изменений проекта:

Версия 3.1:

Эта версия включает в себя: [....] (3) Методы нециклического сдвига битов теперь возвращают себя, так что их можно объединить в цепочку;

person Martijn Pieters    schedule 23.09.2015