2012-03-16 11 views
0

私は(継続的に)gmailとimaplibを使ってプロジェクトを進めています。私は特定の単語を含む電子メールを探していて、ユニークなIDのリストを受け取っています(私のコードの大半はDoug Hellmanのものです、彼の優秀な人はです)。これらのユニークIDはリストに保存されます。私はリストから単一のIDを取得しようとしていますが、random.choiceはリスト全体を引き出します。ランダムな選択で、単一の項目の代わりにリスト全体を取得する

import imaplib 
import random 
from imaplib_list_parse import parse_list_response 

c = imaplib_connect.open_connection() 
msg_ids = [] 
c.select('[Gmail]/Chats', readonly=True) 
typ, msg_ids = c.search(None, '(BODY "friend")') 
random_id = random.choice(msg_ids) 
print random_id 

私は通訳とmsg_idsで周り台無しまし間違いリストされています。ここでは、コードです。また、配列の特定の要素(例:msg_ids [1]など)を取得しようとしましたが、「IndexError:範囲外のリストインデックス」とは、「探しているものは存在しません」それはそこにあるので混乱している。

リストがリストでないときはいつですか?か何か?よくわかりません。

いつものように、私はstackoverflowのの素晴らしい人々が与えることができる任意のフィードバックを感謝:)

+0

私は混乱しています。あなたはsearch_body()関数を持っていますが、それは決して呼び出されないので、msg_idsはまだ空リストであり、random.choice()がIndexErrorを発生させます。その後、 'print random'はrandom_idではなくrandomモジュールに関する情報を出力します。これは実行したコードですか、インデントエラーや行がありませんか? – DSM

+0

ああ、私はちょうど私が通訳で働いていることに気付きました、そして、これは崇高な座っていたコードです。より正確なコードを表示するように改訂しました。 – spikem

答えて

1

私はrandom_idはリストのリストだと思う、のようなもの:[[1,2,3,5]]。だからをあなたはmsg_idsを呼び出すときに、[1]、それははIndexErrorを上げます。リストには要素が1つしかないので、random.choice()は常に要素を返します。あなたが試すことができます。

print random.choice(msg_ids[0]) 

を、物事のこの種をデバッグするには、random_idを印刷してみてください、または問題を見つけるために、対話型コードにIPythonを使用することができます。

+0

Hm、それは乱数を引き上げていますが、具体的にはリスト内の一意のIDの番号ではありません。不思議なことに、リストのlen(len(msg_ids))を実行すると "1"に変わります。 – spikem

関連する問題