2014-01-24 101 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很多 – user3199813

+0

@ user3199813非常歡迎您!如果您認爲此答案有幫助,請接受。 – aIKid