在使用python的tokenize模块更改了一些元素之后,我试图重建一行python代码。简单的tokenize/untokenize不会重建原始代码,它会在输出中添加额外的空格。你知道吗
在untokenize
中是否有一个bug或者我遗漏了什么?你知道吗
from tokenize import tokenize, untokenize
from io import BytesIO
def retoken(text):
result = []
g = tokenize(BytesIO(text.encode('utf-8')).readline) # tokenize the string
for toknum, tokval, _, _, _ in g:
result.append((toknum, tokval))
return untokenize(result).decode('utf-8')
code = "x.y=12"
print("CODE:", code)
print("RETOKEN:", retoken(code))
输出:
CODE: x.y=12
RETOKEN: x .y =12
untokenize
的文档说明我怀疑
untokenize
在构建输出字符串时没有检查它的整个标记列表。它似乎在标识符令牌之后添加了一个空格,因为该字符保证不是前面的标识符令牌的一部分,也不是后面的任何令牌的一部分,或者是令牌本身。这有助于确保tokenize(untokenize(tokenize(s))) == tokenize(s)
,即使untokenize(tokenize(s))
可能不等于s
。你知道吗相关问题 更多 >
编程相关推荐