2017-05-29 70 views
0

所以,基本上我想知道为什么这段代码有时工作...有时它工作得很好,有时它会带来索引错误。我有一个包含数据的双向列表4x100。我简单地从第三行中检索数据,将其全部归入1个变量中。索引错误:列表索引超出范围发生在时间

下面的列表:

a=4 
lst = [[] for _ in xrange(a)] 
wifi= Wireless('wlan0') 
while i<100: 
    results = wifi.scan() 
    print cont 
    print "%-8.16s Scan completed :" % (wifi.ifname,) 
    for ap in results: 
     if ap.bssid==AP1: 
      lst[0].append(ap.quality.getSignallevel()) 

     if ap.bssid==AP2: 
      lst[1].append(ap.quality.getSignallevel()) 

     if ap.bssid==AP3: 
      lst[2].append(ap.quality.getSignallevel()) 

     if ap.bssid==AP4: 
      lst[3].append(ap.quality.getSignallevel()) 
i=i+1 
cont=cont+1 

for j4 in range(0,100): 
    num7=num7+lst[3][j4] 
+1

请提供给我们您的'lst'对象示例,其中它失败 –

+0

什么是'lst'?它的内容可能是你的罪魁祸首。 – Signal

+0

您实际上是从第4行检索数据,因为您的索引开始计数为0。您确定“lst”正好是4x100吗? 'len(lst)== 100'和'all(len(c)== 4 for c in lst)== True'? – Ben

回答

0

因为它已经被提到没有足够的信息来告诉你到底为什么你的索引超出范围的错误。

有几个可能的原因:

  1. wifi.scan()并不在列表中只返回4个值。这就是为什么lst中的第三个列表不是大小100.请检查results列表中是否有正好4个值。

  2. 并非所有if语句都是由于某种原因而工作的。您需要检查每个ap项目的值 - 只需将其打印出来并通读值。常量AP1AP2等 - 是否正确初始化?

而且我会用elif语句,而不是仅仅if。我认为它会使代码更易读,更好。

+0

谢谢你们!问题是每个数组的长度不同! –