在Python / IPython中解决TypeError

时间:2017-04-19 03:42:00

标签: python python-3.x python-2to3

我在使用以下功能时遇到问题

def get_lexographically_next_bit_sequence(self, bits):
    """
    Bit hack from here:
    http://www-graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation

    Generator even does this in poker order rank 
    so no need to sort when done! Perfect.
    """
    t = (bits | (bits - 1)) + 1 
    next = t | ((((t & -t) // (bits & -bits)) >> 1) - 1)  
    yield next
    while True:
        t = (next | (next - 1)) + 1 
        next = t | ((((t & -t) // (next & -next)) >> 1) - 1)
        yield next

此函数返回错误:

  

TypeError:>>:'float'和'int'

不支持的操作数类型

注意: 这个python库只支持2.7,我使用2to3才能使用它。图书馆的其他部分按照需要工作,所以我一般都相信2to3可以工作。

我试图在IPython 3.5中运行它,我听说像这样的一些错误可能会在IPython中发生,所以我想知道它是否与此相关。

1 个答案:

答案 0 :(得分:0)

问题源于您尝试在两种不同数据类型(floatint)之间执行(int(((t & -t) // (next & -next)) >> 1) - 1)这一事实。使用{{1}}将float向下转换为int应该尽我所知。