2013-01-07 45 views
14

Tôi có đoạn code Python sau:Python lỗi khi cố gắng truy cập vào danh sách bằng cách chỉ số - "Danh sách các chỉ số phải là số nguyên, không str"

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

Và tôi nhận được lỗi sau:

TypeError: list indices must be integers, not str

Tôi đã tìm kiếm một lỗi gần tôi, nhưng không chắc chắn làm thế nào để làm điều đó, không bao giờ có lỗi đó. Vì vậy, yeah, làm thế nào tôi có thể chuyển đổi nó thành số nguyên thay vì chuỗi? Tôi đoán vấn đề xuất phát từ str(player['score']).

Trả lời

32

Bạn có mong đợi playerdict thay vì list không?

>>> 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, cảm ơn. Tôi sửa nó rồi. –

5

players là danh sách cần được lập chỉ mục theo số nguyên. Bạn dường như đang sử dụng nó như một từ điển. Có lẽ bạn có thể sử dụng giải nén - Một cái gì đó như:

name, score = player 

(nếu danh sách player luôn luôn là một chiều dài không đổi).

Không có nhiều lời khuyên khác mà chúng tôi có thể cung cấp cho bạn mà không biết query là gì và cách hoạt động.

Điều đáng nói là toàn bộ mã bạn đăng không có ý nghĩa gì cả. Có một số IndentationError trên dòng thứ hai. Ngoài ra, chức năng của bạn được lặp qua một số lặp lại, nhưng vô điều kiện trở lại trong lần lặp đầu tiên mà thường không phải là những gì bạn thực sự muốn làm.

6

player['score'] là sự cố của bạn. người chơi rõ ràng là một list có nghĩa là không có yếu tố 'điểm'. Thay vào đó, bạn sẽ làm điều gì đó như:

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

Tất nhiên, bạn sẽ phải biết chỉ mục danh sách (đó là 0 và 1 trong ví dụ của tôi).

Giống như player['score'] được phép trong python, nhưng player sẽ phải là dict.

Bạn có thể đọc thêm về cả hai danh sách và dấu trang trong python documentation.

+0

Tôi đọc về sự khác biệt. Cảm ơn bạn. –

1

Danh sách là một chuỗi các khoảng trắng có thể được lập chỉ mục theo (0, 1, 2 .... v.v.). Vì vậy, nếu người chơi là một danh sách, người chơi [0] hoặc người chơi [1] sẽ làm việc. Nếu người chơi là một từ điển, người chơi ["tên"] sẽ làm việc.

Các vấn đề liên quan