Python语法错误:二进制字面量

3

我继承了这个Python程序,由于我对位数等方面不太熟悉,所以无法找出问题所在。在下面函数的第一行,我遇到了语法错误:

def tileKey(self, z, x, y):
    zBits = z & 0xFFL
    #  8bits, 256 levels. normally [0,21]
    xBits = x & 0xFFFFFFFL
    #  28 bits
    yBits = y & 0xFFFFFFFL
    #  28 bits
    key = (zBits << 56) | (xBits << 28) | (yBits << 0)
    #  return the key value integer 720576213915009588
    return key

2
请编辑您的帖子,包括完整的回溯/错误消息。谢谢。 - mechanical_meat
0xFFL代表一个数字的实际含义是什么? 十六进制中没有'L'! - El Hocko
@cIph3r L代表Long(无关但有趣→链接)。 - Nadir Sampaoli
啊,好的,我使用Python3.2,这里已经没有L了。 - El Hocko
@cIph3r 我已经猜测到错误了 :) 除了确认之外 - 我们仍在等待看到真正的错误消息是什么。 - Jon Clements
显示剩余3条评论
2个回答

12
如果您正在使用Python 3.x,则无法再使用“L”后缀,因为它不再是必需的,也不是语法的一部分。
yBits = y & 0xFFFFFFFL
Original exception was:
  File "<stdin>", line 1
    0xFFL
        ^
SyntaxError: invalid syntax

那么...只需要去掉 'L' 吗? - cryanbhu
1
@cryanbhu,没错 - 就是那一个... - Jon Clements

0

这是因为缩进有误,您需要缩进函数体。您的函数应该像这样缩进:

def tileKey(self, z, x, y):
    zBits = z & 0xFFL
    #  8bits, 256 levels. normally [0,21]
    xBits = x & 0xFFFFFFFL
    #  28 bits
    yBits = y & 0xFFFFFFFL
    #  28 bits
    key = (zBits << 56) | (xBits << 28) | (yBits << 0)
    #  return the key value integer 720576213915009588
    return key

看起来这是一个类中的方法,因此整个方法的定义应该在带有 class 关键字的那一行之后缩进,例如:
class YourClass:
    def tileKey(self, z, x, y):
        zBits = z & 0xFFL
        #  8bits, 256 levels. normally [0,21]
        xBits = x & 0xFFFFFFFL
        #  28 bits
        yBits = y & 0xFFFFFFFL
        #  28 bits
        key = (zBits << 56) | (xBits << 28) | (yBits << 0)
        #  return the key value integer 720576213915009588
        return key

抱歉,我的错,缩进是正确的,但剪切和粘贴出了问题,现在应该已经修复了。 - Frank Conry
那么你收到了什么错误信息? - piokuc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接