왜 것이python 토큰 화의 버그?
if 1 \
and 0:
pass
토큰 화/untokenize주기에 코드 초크의 간단한이
import tokenize
import cStringIO
def tok_untok(src):
f = cStringIO.StringIO(src)
return tokenize.untokenize(tokenize.generate_tokens(f.readline))
src='''if 1 \\
and 0:
pass
'''
print tok_untok(src)
그것은 예외 :
AssertionError:
File "/mnt/home/anushri/untitled-1.py", line 13, in <module>
print tok_untok(src)
File "/mnt/home/anushri/untitled-1.py", line 6, in tok_untok
tokenize.untokenize(tokenize.generate_tokens(f.readline))
File "/usr/lib/python2.6/tokenize.py", line 262, in untokenize
return ut.untokenize(iterable)
File "/usr/lib/python2.6/tokenize.py", line 198, in untokenize
self.add_whitespace(start)
File "/usr/lib/python2.6/tokenize.py", line 187, in add_whitespace
assert row <= self.prev_row
이 토큰 화되는 SRC를 수정하지 않고 해결 방법이 있나요 (그것은
\
이 범인 인 것 같습니다)
실패한 또 다른 예는 끝에 줄 바꿈이없는 경우입니다. src='if 1:pass'
이 같은 오류와 함께 실패
해결 방법 : 그러나 untokenize 다른 방법을
def tok_untok(src):
f = cStringIO.StringIO(src)
tokens = [ t[:2] for t in tokenize.generate_tokens(f.readline)]
return tokenize.untokenize(tokens)
즉 다시 전체 토큰 튜플 만 t에 통과하지 못한 작품을 사용하는 것 [2]
python doc하지만 추가 말합니다를 args는 건너 뜁니다
토큰을 파이썬 소스 코드로 변환합니다. 이터 러블은 시퀀스를 적어도 두 개의 요소, 즉 토큰 유형과 토큰 문자열로 반환해야합니다. 추가 시퀀스 요소는 모두 입니다.
파이썬 2.5에서는 괜찮습니다. 2.7에서는 AssertionError를 던집니다. – TryPyPy