python3.4,<&lt ;,不支持的操作数类型,如何解决?

时间:2017-12-23 11:40:36

标签: python

我读到了这个:https://stackoverflow.com/a/37605582/6426449

此部分发生错误

START_TIME = time.time() #at some time

def make_id():

    t = int(time.time()*1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23 ) | u #This part has problem

    return id

unsupported operand type(s) for <<

我无法使用此操作<<

或者如何使用<<

2 个答案:

答案 0 :(得分:3)

使t成为整数,请注意括号:

 t = int(time.time()*1000 - START_TIME)

您的版本:

t = int(time.time()*1000) - START_TIME

使t成为浮点数,因为START_TIME是浮点数。

答案 1 :(得分:2)

似乎这一行

t = int(time.time()*1000) - START_TIME

t强制转换为浮点数(我猜因为START_TIME是浮点数)。但是,您不能将按位移位应用于浮点数,因此请尝试使用

import time
import random

START_TIME = time.time() #at some time

def make_id():

    t = int(time.time()*1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (int(t) << 23 ) | u #Note the explicit INT() here

    return id

print(make_id())