尝试在python3.0中tokenize字符串时,为什么在标记开始前得到前导'utf-8'

python3 docs中,现在应按以下方式使用tokenize

g = tokenize(BytesIO(s.encode('utf-8')).readline)


但是,在终端上尝试此操作时,会发生以下情况:

>>> from tokenize import tokenize
>>> from io import BytesIO
>>> g = tokenize(BytesIO('foo'.encode()).readline)
>>> next(g)
(57, 'utf-8', (0, 0), (0, 0), '')
>>> next(g)
(1, 'foo', (1, 0), (1, 3), 'foo')
>>> next(g)
(0, '', (2, 0), (2, 0), '')
>>> next(g)


utf-8令牌在其他令牌之前是什么?这应该发生吗?如果是这样,那我应该总是跳过第一个令牌吗?

[编辑]

我发现令牌类型57是tokenize.ENCODING,如果需要可以很容易地将其从令牌流中过滤掉。

最佳答案

那就是源代码的cookie。您可以明确指定一个:

# -*- coding: utf-8 -*-
do_it()


否则,Python会采用默认编码,即Python 3中的utf-8。

关于python - Python3.0: token 化和BytesIO,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/913409/

10-12 20:19