TypeError:&:' NoneType'不支持的操作数类型和' BitVector'

时间:2015-09-23 11:04:39

标签: python nonetype bitvector

这是python代码。

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(因为我认为这是创建问题

1 个答案:

答案 0 :(得分:2)

看起来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 package,则需要升级到3.1或更高版本(当前版本为3.4.4),因为该版本已将return self添加到BitVector.shift_left() }和BitVector.shift_right()方法。

来自项目更改日志:

  

版本3.1:

     

此版本包括:[....](3)非循环位移方法现在返回self,以便它们可以链接;