2013-01-07 11 views
14

Mam następujący kod Python:Python błąd podczas próby uzyskania dostępu przez indeks listy - „Lista indeksów muszą być liczbami całkowitymi, nie STR”

currentPlayers = query.getPlayers() 
    for player in currentPlayers: 
     return str(player['name'])+" "+str(player['score']) 

A ja otrzymuję następujący błąd:

TypeError: list indices must be integers, not str

Szukałem błędu w pobliżu mojego, ale nie wiem, jak to zrobić, nigdy nie miałem tego błędu. Więc tak, jak mogę przekształcić go w liczby całkowite zamiast łańcucha? Domyślam się, że problem pochodzi z str(player['score']).

Odpowiedz

32

Czy spodziewałeś się, że player będzie numerem dict zamiast list?

>>> player=[1,2,3] 
>>> player["score"] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: list indices must be integers, not str 
>>> player={'score':1, 'age': 2, "foo":3} 
>>> player['score'] 
1 
+0

Oye, dzięki. Naprawiłem to. –

5

players to lista, która musi być indeksowana według liczb całkowitych. Wydaje się, że używasz go jak słownika. Być może można użyć rozpakowywanie - coś takiego:

name, score = player 

(jeżeli lista player jest zawsze stała długość).

Nie ma o wiele więcej porad, które możemy Ci podać, nie wiedząc, co to jest query i jak to działa.

Warto podkreślić, że cały opublikowany przez Ciebie kod nie ma większego sensu. W drugim wierszu znajduje się IndentationError. Ponadto twoja funkcja zapętla nad niektórymi iteracjami, ale bezwarunkowo powraca podczas pierwszej iteracji, która zwykle nie jest tym, co naprawdę chcesz zrobić.

6

player['score'] to twój problem. gracz jest najwyraźniej list, co oznacza, że ​​nie ma elementu "score". Zamiast tego można zrobić coś takiego:

name, score = player[0], player[1] 
return name + ' ' + str(score) 

Oczywiście, trzeba by wiedzieć indeksy lista (są to cyfry 0 i 1 w moim przykładzie).

Coś takiego jak player['score'] jest dozwolone w Pythonie, ale player musiałoby być dict.

Możesz przeczytać więcej o listach i dyktach w python documentation.

+0

Tak, czytam o różnicy. Dziękuję Ci. –

1

Lista jest łańcuchem miejsc, które można indeksować za pomocą (0, 1, 2 .... itd.). Więc jeśli gracze byli listą, gracze [0] lub gracze [1] by działali. Jeśli gracze są słownikami, gracze ["nazwa"] by działali.

Powiązane problemy