python - 在 python3.x 中标记化

标签 python porting distutils

我在 python2.x 中有以下代码:

class _CHAIN(object):

    def __init__(self, execution_context=None):
        self.execution_context = execution_context

    def eat(self, toktype, tokval, rowcol, line, logical_line):        
        #some code and error checking


operations = _CHAIN(execution_context)

tokenize(StringIO(somevalue).readline, operations.eat)

现在的问题是在 python3.x 中第二个参数不存在。我需要在标记化之前调用函数 operations.eat()。我们如何在 python3.x 中执行上述任务。一种想法是在“tokenize”语句(代码的最后一行)之前直接调用函数 tokenize.eat()。但我不确定要通过的论点。我相信一定有更好的方法来做到这一点。

最佳答案

您使用的是一个有点奇怪的遗留系统,您将一个可迭代对象和一个可以接受 token 的可调用对象一起传递给函数。新方法在概念上更简单,并且适用于 Python 2 和 3:

from tokenize import generate_tokens
for token in generate_tokens(StringIO(somevalue).readline):
    eat(token)

这对于 Python 3 在技术上没有记录,但不太可能被删除。 Python 3 中的官方 tokenize 函数需要字节,而不是字符串。有 a request用于标记字符串的官方 API,但它似乎已经停滞不前。

关于python - 在 python3.x 中标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952178/

相关文章:

python - 谷歌bigquery中的时间戳格式丢失

c++ - 使用读取 [ebp+4] 的 MSVC 内联 asm 移植到 64 位

python - 如何让我的 setup.py 使用文件的相对路径?

python - 如何通过图形工具使用 CSV 文件数据在 Python 中创建图形?

python - 减少数据噪音

c - 将项目从 64 位移植到 32 位时 : float changed to long double gives error for %f

python - 仅在 setup.py 中可能时编译可选的 cython 扩展

python - Distutils 在 Ubuntu 上忽略 build/lib

python - 将图像的内存大小从RGB增加到Grey,OpenCV

python - 通过 ctypes 将 C 库移植到 Python