簡體   English   中英

IndexError:列表索引超出范圍-Python CSV

[英]IndexError: List index out of range - Python CSV

我正在使用tweepy從Twitter提取10條推文,並將其存儲在CSV中,以供日后在前端網頁上顯示。 我的代碼每60分鍾刷新一次,在某些時候,我會收到“ IndexError”。

以下是確切的錯誤:

返回ks [5]

IndexError:列表索引超出范圍

以下是從CSV檢索特定推文的功能:

def tweet6(self):
    with codecs.open('HELLOTWITTER.csv', 'r', encoding='utf-8', errors='ignore') as f:
        reader = csv.reader(f)
        d = {}
        for i, row in enumerate(reader):
            d[row[0]]=row[1:]
            if (i>=10):
                break    
    ks=list(d)
    return (ks[5])

盡管有時會出現此錯誤,但我無法弄清楚為什么會發生此錯誤,盡管每次刷新整個代碼時CSV都會將所有10條tweet寫入其中。 另外,如果我再次運行代碼,錯誤消失了,並且網頁加載時推文沒有任何問題,令人驚訝!

我想念什么? 任何幫助深表感謝! 謝謝!

正如肯·懷特(Ken White)在上述評論中指出的那樣。 該錯誤是由您嘗試訪問列表范圍之外的索引引起的。

發生的是,您的CSV文件中有一個空白行,python無法處理該行,因為您正在調用index 0即使該index 0不存在,因此python也會引發異常。

為了解決此錯誤,您需要做的是檢查列表中是否有足夠的元素來運行代碼。 通過使用

if(len(row) < 1):
   continue

可能引起問題的另一個地方是您將列表d放入另一個列表ks 然后,您嘗試返回新列表中的第5個對象。 但是,沒有對象,因為您現在有了一個看起來像這樣的列表

ks={{tweet,tweetyouwant,tweet},{list,two,if,present}}

當您期望列表看起來像這樣時

ks={tweet,tweetyouwant,tweet}

為了解決這個問題,只需擺脫ks=list(d)並在要調用ks任何地方調用d


您的整個代碼段都應該這樣。

def tweet6(self):
    with codecs.open('HELLOTWITTER.csv', 'r', encoding='utf-8', errors='ignore') as f:
        reader = csv.reader(f)
        d = {}
        for i, row in enumerate(reader):

            #Verify row is within range
            if(len(row) < 1):
                continue

            #Get the rows values
            d[row[0]]=row[1:]

            #If past row 10 then break
            if (i>=10):
                break  

    #ks=list(d) #Not needed D is already a list
    return (d[5]) #return the row of the 6th tweet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM