3

为了标记我正在使用的输入表达式tokenize.generate_tokens()

tokens = cStringIO.StringIO(SourceLine).readline
tokens = tokenize.generate_tokens(tokens)

现在,当SourceLine = "Y123 = 00911 + 98 / 3"tokens元组中时,我得到以下标记值:

"Y123", "=" , "00", "911","+", "98" , "/" , "3"

但是,当我通过时SourceLine = "Y123 = 00411 + 98 / 3",我得到:

"Y123", "=" , "00411", "+" ,"98","/","3"

我不明白为什么在第一种情况下00911它生成了两个令牌00911而不是只有一个具有价值的令牌00911

4

2 回答 2

4

在 Python 2 中,以 开头的整数文字0被解释为八进制数(以 8 为基数)。因此,您的第一个SourceLine实际上在语法上无效,因为9它不是八进制的有效数字:

>>> Y123 = 00911 + 98 / 3
  File "<stdin>", line 1
    Y123 = 00911 + 98 / 3
               ^
SyntaxError: invalid token

因此,标记器似乎将其解析为十进制文字旁边的有效八进制文字。如果您尝试解析一些类似 Python 的语言,您可以将其后处理回您想要的格式。

于 2013-02-18T18:13:20.697 回答
3

原因是 tokenize 将 '00411' 解释为八进制数,而 '00911' 不是。所以它返回“00”,一个有效的八进制数,后跟“911”,一个有效的十进制数。

于 2013-02-18T18:13:15.847 回答