尝试按索引访问列表时出现Python错误 - “列表索引必须是整数,而不是str”

时间:2014-07-01 16:46:48

标签: python gammu

我有这个Python代码:

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

我尝试解决的问题:

首先,我一直在寻找相同问题的答案,但我找不到任何相似的问题。

根据sms变量的打印来查看它返回的内容,看看如何分配'Location',这是打印在:

[{'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,因此函数的结果是预先格式化的,因此返回表单。

有人可以帮我一个忙吗?

我希望我的信息有用,以便您能够理解我的问题 P. S.电话号码在###目的

2 个答案:

答案 0 :(得分:1)

sms列表(因为括号[])会发生什么。它唯一的元素是字典{}

你能做什么?你可以访问该列表的唯一元素,它将是一个字典:

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

答案 1 :(得分:0)

smslist,不接受str类型的索引:

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

它包含一个词典:

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

因此,您可以发出:

>>> sms[0]['Location']
0