2016-06-12 2 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 tutorial] (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 '는 건너 뛸 수 없습니다. 그것은 여전히 ​​사전의 핵심입니다. –

관련 문제