据此:http ://code.activestate.com/lists/python-list/413540/ ,tokenize.generate_tokens
应该使用而不是tokenize.tokenize
。
这在Python 2.6
. 但它不再适用于Python 3
:
>>> a = list(tokenize.generate_tokens(io.BytesIO("1\n".encode()).readline))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.2/tokenize.py", line 439, in _tokenize
if line[pos] in '#\r\n': # skip comments or blank lines
但是,在 中Python 3
,这也有效(并且还返回所需的输出):
a = list(tokenize.tokenize(io.BytesIO("1\n".encode()).readline))
根据文档,似乎tokenize.tokenize
是使用此模块的新方法:http: //docs.python.org/py3k/library/tokenize.html。tokenize.generate_tokens
甚至不再记录。
generate_tokens
但是,如果没有记录,为什么这个模块中还有一个功能?我还没有找到任何关于此的 PEP。
我正在尝试维护一个代码库,Python 2.5-3.2
我应该调用和generate_tokens
for吗?没有更好的方法吗?Python 2
tokenize
Python 3