2013-01-07 16 views
14

मैं निम्नलिखित पायथन कोड:अजगर त्रुटि सूचकांक द्वारा सूची तक पहुँच करने की कोशिश कर - "सूची सूचकांक पूर्णांकों होना चाहिए, str नहीं"

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

और मैं निम्न त्रुटि हो रही है:

TypeError: list indices must be integers, not str

मैं अपने करीब एक त्रुटि की तलाश कर रहा हूं, लेकिन यह सुनिश्चित नहीं है कि इसे कैसे किया जाए, कभी भी यह त्रुटि नहीं मिली। तो हाँ, मैं इसे स्ट्रिंग के बजाय पूर्णांक में कैसे बदल सकता हूं? मुझे लगता है कि समस्या str(player['score']) से आती है।

उत्तर

32

क्या आप player के बजाय dict होने की उम्मीद कर रहे थे?

>>> 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

ओए, धन्यवाद। मैंने ठीक कर दिया। –

5

players एक सूची है जिसे पूर्णांक द्वारा अनुक्रमित करने की आवश्यकता है। आप इसे एक शब्दकोश की तरह इस्तेमाल कर रहे प्रतीत होते हैं। शायद तुम unpacking इस्तेमाल कर सकते हैं - तरह:

name, score = player 

(player सूची हमेशा एक निरंतर लंबाई है)।

query यह जानने के बिना हम आपको और अधिक सलाह नहीं दे सकते हैं कि यह कैसे काम करता है।

यह इंगित करने लायक है कि आपके द्वारा पोस्ट किया गया पूरा कोड पूरी तरह से समझ में नहीं आता है। दूसरी पंक्ति पर IndentationError है। साथ ही, आपका फ़ंक्शन कुछ पुनरावर्तनीय पर लूपिंग कर रहा है, लेकिन पहले पुनरावृत्ति के दौरान बिना शर्त रूप से लौट रहा है जो आम तौर पर आप वास्तव में नहीं करना चाहते हैं।

6

player['score'] आपकी समस्या है। खिलाड़ी स्पष्ट रूप से list है जिसका अर्थ है कि कोई 'स्कोर' तत्व नहीं है। इसके बजाय आप की तरह कुछ करना होगा:

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

बेशक, आप सूची सूचकांक पता करने के लिए होगा (उन 0 और मेरे उदाहरण में 1 कर रहे हैं)।

कुछ पाइथन में player['score'] की अनुमति है, लेकिन player को dict होना होगा।

आप python documentation दोनों सूचियों और dicts के बारे में अधिक पढ़ सकते हैं।

+0

हाँ मैंने अंतर के बारे में पढ़ा। धन्यवाद। –

1

एक सूची रिक्त स्थान की एक श्रृंखला है जिसे (0, 1, 2 .... आदि) द्वारा अनुक्रमित किया जा सकता है। तो यदि खिलाड़ी एक सूची थी, तो खिलाड़ी [0] या खिलाड़ी [1] काम करेंगे। यदि खिलाड़ी एक शब्दकोश है, तो खिलाड़ी ["नाम"] काम करेंगे।

संबंधित मुद्दे