2014-01-24 7 views
0
Enter expression:car.a + var.a 
car Variable 
. Variable 
a Variable 
+ operator 
var Variable 
. Variable 
a Variable 
Traceback (most recent call last): 
    File "D:\My Documents\Python\Lexical analyzer.py", line 62, in <module> 
    if(check_main(temp[i]) == 'Variable'): 
IndexError: list index out of range 

for i in range(1,len(temp),2): 
if temp[i] == '.': 
    if check_main(temp[i-1])=='Variable': 
     temp[i-1:i+2]= [''.join(temp[i-1:i+2])] 

목록은 정확했다 [ 'car.a', '+', 'var.a']하지만 내 나쁜 영어왜 범위를 벗어 났습니까? 파이썬

+0

62 번째 줄에있는 코드가 아니라 오류를 일으키는 코드를 표시하지 않았습니다. – furins

+4

오류가있는 줄은'if (check_main (temp [i]) == 'Variable') :''그러나'' 당신이 우리에게 보여준 코드가 아닙니다. – mhlester

답변

7

죄송 경계의 부족을 보여 주었다 이유를 모르겠어 그것은 길이를 반복하면서 목록을 수정하기 때문에 채권이 없습니다. 이 문제는 다음과 같습니다.

temp[i-1:i+2]= [''.join(temp[i-1:i+2])] 

여기서는 한 번 세 항목 만 한 항목으로 변경했습니다. 따라서 반복 할 때 목록의 길이가 실제로 짧아집니다! 아주 이상 하군, 응? 어느 시점에 temp[i]은 더 이상 유효하지 않습니다. i은 현재 len(temp)보다 크기 때문에 더 이상 유효하지 않습니다.

>>> l = [1, 2, 3, 4, 5] 
>>> l[1:4] = [1] 
>>> l 
[1, 1, 5] 

솔루션 :

이 같은 불편을 끼쳐? 목록을 수정하는 대신 새 목록을 만들 것을 권합니다. 아마도 다음과 같은 것일 수 있습니다 :

if check_main(temp[i-1])=='Variable': 
    new_list.append(''.join(temp[i-1:i+2])) 

희망이 있습니다.

+0

OOOOHHHH ty so much – user3199813

+0

@ user3199813 대단히 환영합니다! 이 답변이 도움이된다고 생각한다면 동의하십시오. – aIKid

관련 문제