因此,我嘗試合併在一起的這些Python列表出現問題。我正在嘗試編寫一個算法來檢查機器是否連接到互聯網。所以我ping不同的Google服務器,如果它們都不響應,我認爲機器處於脫機狀態。合併Python列表失敗
我用來ping服務器的腳本是由另一個腳本構成的重寫,它可以被找到here。 echo()
函數發送一個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應該知道爲什麼正在發生。
在此先感謝。
顯然遞歸函數返回'None'(而不是一個可能包含'None'的列表) –
'list.extend'在原地修改列表並返回'None',所以不需要重新分配列表。擴展到任何變量。 –
@AloisMahdal這會引發'TypeError:'NoneType'對象不可迭代',而不是'AttributeError:'NoneType'對象沒有屬性'extend'' –