我在 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/