次のサンプル コード:
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))
この動作に関するいくつかの質問:
- ここで tokenize.TokenError をキャッチして「選択的に」無視する必要がありますか? または、準拠していない/不完全なコードからトークンを生成しようとするのをやめるべきですか? もしそうなら、どうやってそれを確認しますか?
- このエラー (または同様のエラー) は、終了していない docstring 以外の原因で発生する可能性がありますか?