2016-06-12 10 views
2

グループ内のチャットの送信者の名前を取得するボットを作ろうとしました。私はTelepotでPythonを使用しています。私はこの問題を解決するにはどうすればよいTypeError:リストインデックスはユニコードではなく、整数でなければなりません(Telepot retrieve name)

TypeError: list indices must be integers, not unicode 

:私はこれを実行すると

>>> from pprint import pprint 
>>> import telepot 
>>> response = bot.getUpdates() 
pprint(response) 
[{u'message': {u'chat': {u'first_name': u'Nick', 
         u'id': 999999999, 
         u'last_name': u'Lee', 
         u'type': u'private'}, 
      u'date': 1444723969, 
      u'from': {u'first_name': u'Nick', 
        u'id': 999999999, 
        u'last_name': u'Lee'}, 
      u'message_id': 4015, 
      u'text': u'Hello'}, 
u'update_id': 100000000}] 

、それは私がこのエラー

sender1 = response[u'message'][u'from'][u'first_name'] 
sender2 = response[u'message'][u'from'][u'last_name'] 

エラーを与えますか?

+0

response'が 'list'は'ようにするには、複数の更新を持つことができます。おそらく、リストを索引付けすることによって、あなたが興味のある更新を選択する必要があります。 –

+0

リストのインデックスを作成するにはどうすればよいですか?申し訳ありません、私はこの言語を勉強し始めました。 –

+0

新しいことを学んでいるなら、おそらくドキュメントを読むのに慣れておくのが最善です。 [pythonチュートリアル](https://docs.python.org/3/tutorial/introduction.html#lists)をご覧ください。 –

答えて

0

リストの代わりにget()を使用して、辞書の値にアクセスします。 (キーが利用できない場合やNone)このメソッドは、辞書内の指定されたキーの値を返します。

sender1 = response[0][u'message'][u'from'].get(u'first_name') 
sender2 = response[0][u'message'][u'from'].get(u'last_name') 

# output: 
# >>> print sender1 
# u'Nick' 
# >>> print sender2 
# u'Lee' 
+0

'response'はリストです。 –

+0

@Danielしかし、あなたの解決策は 'get'を使って無関係です。 –

+0

あなたのコードを以前に誤読しました、ありがとう、これが修正されました! –

1

大括弧は、リストがあることを意味し、リストは整数またはスライスを使用して索引付けする必要があります。含まれている辞書にアクセスする前に、[0]でインデックスを作成してみてください。

+0

このような? 'sender1 =レスポンス[0] [u'from'] [u'first_name ']'これは私にバインドされたものなどのエラーインデックスを返す... –

+0

nevermind、今このエラーが発生しました sender1 =レスポンス[0] [u'from '] [u'first_name'] KeyError:u'from ' –

+0

あなたは 'u'message''をスキップすることはできません。それはまだ辞書の鍵です。 –

関連する問題