gpt4 book ai didi

python - 如何使用未终止的多行注释处理标记化错误(python 2.6)

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

示例代码如下:

import token, tokenize, StringIO

def generate_tokens(src):
rawstr = StringIO.StringIO(unicode(src))
tokens = tokenize.generate_tokens(rawstr.readline)
for i, item in enumerate(tokens):
toktype, toktext, (srow,scol), (erow,ecol), line = item
print i, token.tok_name[toktype], toktext

s = \
"""
def test(x):
\"\"\" test with an unterminated docstring
"""

generate_tokens(s)

引发以下事件:

... (stripped a little)
File "/usr/lib/python2.6/tokenize.py", line 296, in generate_tokens
raise TokenError, ("EOF in multi-line string", strstart)
tokenize.TokenError: ('EOF in multi-line string', (3, 5))

关于此行为的一些问题:

  1. 我应该捕捉并“有选择地”忽略此处的 tokenize.TokenError 吗?或者我应该停止尝试从不合规/不完整的代码生成 token 吗?如果是这样,我将如何检查?
  2. 此错误(或类似错误)是否可以由除未终止的文档字符串?

最佳答案

如何处理分词错误完全取决于分词的原因。您的代码会为您提供所有有效标记,直到错误字符串文字的开头。如果该 token 流对您有用,请使用它。

关于如何处理错误,您有几个选项:

  1. 您可以忽略它并得到一个不完整的 token 流。

  2. 您可以缓冲所有 token ,并且仅在未发生错误时才使用 token 流。

  3. 您可以处理 token ,但如果发生错误则中止更高级别的处理。

除了不完整的文档字符串之外,是否会发生该错误,是的。请记住,文档字符串只是字符串文字。任何未终止的多行字符串文字都会给你同样的错误。代码中的其他词法错误也可能发生类似的错误。

例如,这里是产生错误的其他 s 值(至少对于 Python 2.5):

s = ")"  # EOF in multi-line statement
s = "(" # EOF in multi-line statement
s = "]" # EOF in multi-line statement
s = "[" # EOF in multi-line statement
s = "}" # EOF in multi-line statement
s = "{" # EOF in multi-line statement

奇怪的是,其他无意义的输入反而会产生 ERRORTOKEN 值:

s = "$"
s = "'"

关于python - 如何使用未终止的多行注释处理标记化错误(python 2.6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640097/

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