如何使用tokezine/untokenize?

2024-04-20 07:41:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用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

Tags: 代码textfromimportcoderesultutfprint
1条回答
网友
1楼 · 发布于 2024-04-20 07:41:15

untokenize的文档说明

[...] the spacing between tokens (column positions) may change.

我怀疑untokenize在构建输出字符串时没有检查它的整个标记列表。它似乎在标识符令牌之后添加了一个空格,因为该字符保证不是前面的标识符令牌的一部分,也不是后面的任何令牌的一部分,或者是令牌本身。这有助于确保tokenize(untokenize(tokenize(s))) == tokenize(s),即使untokenize(tokenize(s))可能不等于s。你知道吗

相关问题 更多 >