2013-01-07 7 views
14

Ich habe folgende Python-Code:Python Fehler, wenn die Liste von Index zuzugreifen versuchen - „Liste Indizes ganze Zahlen sein müssen, nicht str“

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

Und ich bin immer folgende Fehlermeldung:

TypeError: list indices must be integers, not str

Ich habe nach einem Fehler in der Nähe von mir gesucht, aber nicht sicher, wie es geht, bekam nie diesen Fehler. Also ja, wie kann ich es in ganze Zahlen anstatt String umwandeln? Ich schätze das Problem kommt von str(player['score']).

Antwort

32

Haben Sie erwartet, dass player eine dict statt list ist?

>>> 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, danke. Ich habe es repariert. –

5

players ist eine Liste, die durch Ganzzahlen indiziert werden muss. Sie scheinen es wie ein Wörterbuch zu benutzen. Vielleicht könnten Sie auspacken verwenden - So etwas wie:

name, score = player 

(wenn die player Liste ist immer eine konstante Länge).

Es gibt nicht viel mehr Ratschläge, die wir Ihnen geben können, ohne zu wissen, was query ist und wie es funktioniert.

Es ist erwähnenswert, dass der gesamte Code, den Sie gepostet haben, keinen großen Sinn ergibt. In der zweiten Zeile befindet sich ein IndentationError. Außerdem wiederholt Ihre Funktion einige iterable, aber unbedingt während der ersten Iteration, die normalerweise nicht das ist, was Sie eigentlich tun möchten.

6

player['score'] ist Ihr Problem. Spieler ist anscheinend ein list was bedeutet, dass es kein "Score" -Element gibt. Stattdessen würden Sie so etwas wie:

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

Natürlich würden Sie die Liste Indizes wissen müssen (das sind die 0 und 1 in meinem Beispiel).

Etwas wie player['score'] ist in Python erlaubt, aber player müsste ein dict sein.

Sie können mehr über beide Listen und dicts in derlesen.

+0

Ja, ich lese über den Unterschied. Vielen Dank. –

1

Eine Liste ist eine Kette von Leerzeichen, die durch (0, 1, 2, .... usw.) indiziert werden können. Wenn also Spieler eine Liste wären, hätten Spieler [0] oder Spieler [1] gearbeitet. Wenn Spieler ein Wörterbuch ist, hätten die Spieler ["name"] funktioniert.

Verwandte Themen