2017-05-29 36 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

謝謝你們!問題是每個數組的長度不同! –

相關問題