2015-10-04 77 views
-1

在此先感謝您的答案。我試圖研究自己對這個問題的答案几個小時沒有用。我現在要求的不是答案,而是因爲這是大學的任務問題。Python - 遇到IndexError問題:列表索引超出範圍

我有一個程序,它將一組數據存儲在單行記錄中。它保存在一個名爲'sales.txt'的文件中

有一個變量(customerIDInput)從另一個基本上是客戶ID的函數中引入。

我的程序應該通過搜索線的記錄行,發現每一個具有「customerIDInput」在索引記錄0

我得到什麼我會承擔錯誤是循環的最後重複。索引超出範圍。我最初認爲這是最後一個(\ n),因此根本沒有任何索引......但是我已經放入了rstrip(\ n'),問題還沒有解決。

我意識到,我是新來的Python和答案或許很簡單但是我在我頭上,我認爲,它似乎它的時間在這裏問你聰明的人:)

附上功能我有困難。

def searchFile(): 

sales = open('sales.txt', 'r')  
transaction = 'START' 

while transaction != ' ': 

    transaction = sales.readline() 
    transactionStrip = transaction.rstrip('\n')   
    transaction_list = transactionStrip.split() 

    if transaction_list[0] == str(customerIDInput):  
     customerEntry = transaction_list 
     print('matching records are: ',customerEntry) 

sales.close() 
+0

@Samane請不要過去僅刪除帖子的問候。是的,問候需要刪除,但你也可以尋找其他改進? – Justin

回答

1

對文件對象的readline方法將在到達文件結尾時返回一個空字符串。當你的split爲空字符串時,你會得到一個空列表,它沒有第一個元素。這就是爲什麼transaction_list[0]在文件末尾給你一個IndexError的原因。

有幾種不同的方法可以解決這個問題。保持接近目前的代碼,你可以調整你的while循環的條件來尋找transaction是一個空字符串(而不是用一個空格的字符串),並先讀一行:

transaction = sales.readline() # read first line 
while transaction != "": 
    # do stuff with non-empty transaction line 

    transaction = sales.readline() # read next line 

然而,更自然方法來遍歷行的文件是簡單地直接在文件對象上使用for循環:

for transaction in sales: 
    # do stuff 

迭代這種方式將在文件的末尾自動停止。

0

你可以簡單地檢查是否通過調用if transaction_list:(用來檢查是否存在任何項目)實際上是試圖讓transaction_list[0]避免IndexError之前就存在這樣一個指數。

相關問題