2017-12-01 10 views
2

tweepyを使用してTwitterから10個のつぶやきを取り出し、CSVに保存して後でフロントエンドのWebページに表示します。私のコードは60分ごとにリフレッシュされ、ある時点では「IndexError」が取得されます。IndexError:リストのインデックスが範囲外にある - Python 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]) 

このエラーが倍にのみ発生しますが、私は理由を把握することができません:

return ks[5]

IndexError: List index out of range

後は、CSVから特定のつぶやきを取得するための機能です:

以下は、正確なエラーですCSVにはコード全体がリフレッシュされるたびに10個のつぶやきがすべて書き込まれています。 また、コードをもう一度実行すると、エラーが表示されなくなり、驚いたことに、つぶやきに問題なくWebページが読み込まれます。

私には何が欠けていますか? ご迷惑をおかけして申し訳ありません。ありがとう!

+0

コードを正しくフォーマットしてください。 – rvd

+0

変数に期待される結果が含まれているかどうか(あるいはデバッガを使用するか)を確認するためにいくつかの 'print'sを置くことが一般的に役に立ちます –

+3

CVSには10個のつぶやきがすべて書き込まれています毎回*。さもなければ、あなたはPythonがそれについて嘘をついていると信じて、ちょうどふりをすることを期待しています。 *リストインデックスが範囲外です*は、リストインデックスが範囲外であることを意味します。リストインデックスが範囲外の場合は、そのエラーが発生する唯一の理由があります。 –

答えて

2

Ken Whiteは上記のコメントに指摘されています。このエラーは、リストの境界外にある索引にアクセスしようとしたために発生します。

CSVファイルには、index 0が存在しないにもかかわらず、pythonが処理できない空白の行があるため、pythonが例外をスローします。

このエラーを修正するには、コードを実行するのに十分な要素がリストにあるかどうかを確認する必要があります。あなたがリストdを取り、別のリストksの内側にそれを入れているところ

if(len(row) < 1): 
    continue 

を使用することで問題を引き起こしている可能性があります別の場所です。次に、新しいリストの5番目のオブジェクトを返します。あなたは今、あなたは、単にks=list(d)を取り除くこの問題を解決するために、この

ks={tweet,tweetyouwant,tweet} 

に見えるようにリストを期待していた場合は、この

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

のように見えるのリストを持っているのでしかし、オブジェクトがありませんあなたはあなたの全体のスニペットはこれを好きなはずです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 than 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 
+1

問題は 'ks [5]'によっても発生する可能性がありますが、十分なデータがない 'row'と同じではないと思います。 –

+0

まだIndexErrorを取得し続けています。他に何かできますか? :/ – Pooja

+0

ks [5]をチェックしましたか?それが問題を引き起こすと私が考えることができる唯一の他の場所と思われる。私の次のヒントは、すべての行の間にprint文を追加して、どこが壊れているかを確認することです。そうすれば、バグがどこにあるのかを知ることがより簡単になります –

関連する問題