2014-07-01 84 views
2

我有這樣的Python代碼:Python的錯誤時tryint通過索引來訪問列表 - 「列表索引必須是整數,而不是STR」

sm.GetSMSStatus() 
sm.GetSMSFolders() 
sms = sm.GetNextSMS(Start = True, Folder=0) 
sms = sm.GetNextSMS(Location = sms['Location'], Folder=0) 
sms = sm.GetSMS(Location = loc, Folder = 0) 

而我得到的錯誤:

Traceback (most recent call last): 
    File "sms_teste.py", line 43, in <module> 
    sms = sm.GetNextSMS(Location = sms['Location'], Folder=0) 
TypeError: list indices must be integers, not str 

我做了什麼方式來解決:

首先,我一直在尋找答案了相同的問題,但是我無法找到任何類似。

根據由短信變量的打印,看看返回結果是什麼,看看如何分配「位置」,這是打印上:

[{'RejectDuplicates': 0, 'SMSCDateTime': datetime.datetime(2014, 7, 1, 16, 31, 58), 'Class': 1, 'Name': u'', 'InboxFolder': 0, 'Text': u'dsgfzggzdfrg', 'SMSC': {'DefaultNumber': u'', 'Format': 'Text', 'Number': u'+#####', 'Validity': 'Max', 'Location': 0, 'Name': u''}, 'ReplaceMessage': 0, 'Coding': 'Default_No_Compression', 'Number': u'+#####', 'DateTime': None, 'DeliveryStatus': 0, 'State': 'UnSent', 'MessageReference': 0, 'Length': 12, 'Location': 0, 'Memory': 'SM', 'ReplyViaSameSMSC': 0, 'UDH': {'Text': '', 'ID16bit': 0, 'AllParts': 0, 'ID8bit': 0, 'PartNumber': -1, 'Type': 'NoUDH'}, 'Type': 'Submit', 'Folder': 2}] 

而且我注意到,「位置」等於爲0,但你的敲門磚,有「位置」 但現在我在一個死衚衕,我怎麼變換密鑰字符串當變量本身具有字符串鍵作出整數? 我正在使用gammu,因此函數的結果是格式化的,所以返回表單。

有人可以給我嗎?

我希望我的信息將是有益的,這樣就可以明白我的問題 PS的電話號碼都在###上的目的

+0

所以'sms'是含*一個字典,而不是一個字典列表*。 'sms ['Location]''失敗。 –

回答

1

會發生什麼事是,sms列表(因爲支架[]的)。它的唯一元素是字典{}

你能做些什麼?您可以訪問到該列表的獨特元素,這將是一本字典:

sms[0]['Location'] 
...... 
    '-----> dictionary 
+0

啊好的!那麼每當你想訪問一個列表元素就好像在json中行事一樣? 感謝您的幫助 – VRodrigues

+0

這與json無關,使用'some_list [index]'是語法來訪問列表/元組的特定索引中的元素。 – Christian

+0

我知道,這是蟒蛇,JSON談到的,我們可以訪問由JSON :) – VRodrigues

0

smslist,這將不接受str類型的指標:

>>> type(sms) 
<type 'list'> 

而且它含有詞典:

>>> type(sms[0]) 
<type 'dict'> 

因此,你可以發出:

>>> sms[0]['Location'] 
0 
相關問題