0

所以我在尝试合并这些 Python 列表时遇到了一些问题。我正在尝试编写一个算法来检查机器是否连接到互联网。所以我 ping 不同的 Google 服务器,如果它们都没有响应,我假设机器处于离线状态。

我用来 ping 服务器的脚本是我对另一个脚本的重写,可以在此处找到。该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

因此,当我 ping 这些服务器时,我会得到多个列表,并尝试像这样合并它们:

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

这样做会使我出现以下错误:

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

我想知道为什么会这样。

提前致谢。

4

1 回答 1

2

如果异常确实是从您提供的代码中引发的(我假设它是第二行),那么我解释 AttributeError 的唯一方法是 recursive() 函数实际返回None

但是,正如@hcwsha 指出的那样, extend() 本身返回 None 并且您确实将其存储在 中results,因此如果至少有一行与该行相似,那肯定是罪魁祸首。

于 2013-10-13T18:37:44.220 回答