2013-10-13 120 views
0

因此,我嘗試合併在一起的這些Python列表出現問題。我正在嘗試編寫一個算法來檢查機器是否連接到互聯網。所以我ping不同的Google服務器,如果它們都不響應,我認爲機器處於脫機狀態。合併Python列表失敗

我用來ping服務器的腳本是由另一個腳本構成的重寫,它可以被找到hereecho()函數發送一個ping,並返回響應延遲(以秒爲單位)或None(如果失敗)。 recursive()函數發送多個ping並返回一個列表,其中包含echo()(例如[0.054, 0.134, None, 0.037])的響應。

recursive功能(短文檔字符串和一些累評論):

def recursive(dest_addr, count=4, timeout=1, verbose=False): 

    if verbose: 
     print("PING {} ; SEQUENCE {} ; TIMEOUT {}s".format(dest_addr, count, timeout)) 
     nrc = 0 

    log = [] 
    for i in xrange(count): 
     log.append(echo(dest_addr, timeout)) 
     if verbose: 
      if log[-1] is None: 
       print("Echo Request Failed...") 
       nrc += 1 
      else: 
       print("Echo Received: sequence_id={} delay={} ms").format(i, round(log[-1]*1000, 3)) 

    return log 

所以,當我平安這些服務器,我得到這些的多個列表,並試圖將它們合併,像這樣:

results = recursive("google.ca") # North America 
results = results.extend(recursive("google.com.br")) # South America 

做呈現我下面的錯誤:

AttributeError: 'NoneType' object has no attribute 'extend' 

I W應該知道爲什麼正在發生。

在此先感謝。

+1

顯然遞歸函數返回'None'(而不是一個可能包含'None'的列表) –

+4

'list.extend'在原地修改列表並返回'None',所以不需要重新分配列表。擴展到任何變量。 –

+0

@AloisMahdal這會引發'TypeError:'NoneType'對象不可迭代',而不是'AttributeError:'NoneType'對象沒有屬性'extend'' –

回答

2

如果從您提供的代碼中真正引發了異常(我認爲它是第二行),那麼我怎麼才能解釋AttributeError的唯一方法是遞歸()函數實際返回None

但是,正如@hcwsha指出的那樣,extend()本身返回None,並且您將它存儲在results中,所以如果至少有一行類似於該行,它肯定會導致罪魁禍首。