gpt4 book ai didi

Python 3 : tokenize library changes

转载 作者:太空宇宙 更新时间:2023-11-03 19:18:10 25 4
gpt4 key购买 nike

据此: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.htmltokenize.generate_tokens 甚至不再被记录。

但是,如果没有记录的话,为什么这个模块中仍然有一个 generate_tokens 函数呢?我还没有找到任何与此相关的 PEP。

我正在尝试维护 Python 2.5-3.2 的代码库,我是否应该为 Python 2 调用 generate_tokens Python 3 的 tokenize ?有没有更好的办法?

最佳答案

generate_tokensPython 3 中似乎确实是一件奇怪的事情。它不像 Python 2 那样工作。但是,tokenize.tokenize 的行为类似于旧的 Python 2 tokenize.generate_tokens。因此我写了一些解决方法:

import tokenize                             
if sys.hexversion >= 0x03000000d:
tokenize_func = tokenize.tokenize
else:
tokenize_func = tokenize.generate_tokens

现在我只使用tokenize_func,它可以正常工作。

关于Python 3 : tokenize library changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com