1

これによると: 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呼び出す必要generate_tokensがありますか? 何か良い方法はありませんか?Python 2tokenizePython 3

4

2 に答える 2

1

generate_tokensでは本当に奇妙なことのようですPython 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問題なく動作する を使用しています。

于 2012-07-17T22:33:47.723 に答える
0

generate_tokensin python3 は文書化されていませんが、コメント解除されていません。下位互換性のためにあるのでそのまま使えますが、tokenize代わりに changed を使ったほうがいいかもしれません...

于 2012-05-19T18:11:31.410 に答える