python – 处理带前导零的标记

为了标记输入表达式,我使用了tokenize.generate_tokens():

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

现在,当SourceLine =“Y123 = 00911 98/3”时
在令牌元组中,我得到以下标记值:

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

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

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

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

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

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

因此,似乎tokenizer将它解析为十进制文字旁边的有效八进制文字.如果你试图解析一些类似Python的语言,你可以将它重新处理成你想要的格式.

点赞