如何遍历具有 Nonetype 属性的列表? (Python)
How to iterate through a list with a Nonetype attribute? (Python)
我正在 Python 中制作用于 LAN 主机发现的脚本(没有 scapy 是的,我知道,尝试使用套接字库来获得学习经验)。我能够发现主机,但无法将实时主机与 return 没有响应的主机分开,因为我唯一的指示器是超时响应(ping,它是浮点数或 None ),但我无法迭代 ping,因为它可能是非类型,所以我尝试使用 hasattr 检查主机,但我得到一个空字典。有没有更好的方法可以遍历主机?我可以使主机列表成为字典,但这并不能解决遍历非类型的问题。感谢任何输入,谢谢。
`if __name__ == '__main__':
live = []
livee = []
for host, ping in multi_ping_query(subnet).iteritems():
subnet = host, '=', ping
print(subnet)
live.append(subnet)
for ping in live:
check = hasattr(ping, 'Nonetype')
if check == False:
livee.append(host)
print(livee)
这是 multi_ping_query 的函数,我尝试将它调整为 return 一个字符串,如果它没有连接,但是我也没有成功。
def multi_ping_query(hosts, timeout=1, step=512, ignore_errors=False):
results, host_list, id = {}, [], 0
for host in hosts:
try:
host_list.append(socket.gethostbyname(host))
except socket.gaierror:
results[host] = None
while host_list:
sock_list = []
for ip in host_list[:step]: # select supports only a max of 512
id += 1
sock_list.append(PingQuery(ip, id, timeout))
host_list.remove(ip)
# use timeout
asyncore.loop(timeout)
for sock in sock_list:
results[sock.get_host()] = sock.get_result()
return results
无需测试您的代码,但如果我理解正确,只需使用 "is None" 再次检查 None 类型:
if ping is not None:
live.append(host)
通常,您可以通过迭代以下生成器来迭代任何可迭代对象,同时排除 None
值:
>>> iterable = [1, None, 2, 3, None]
>>> iterable_nonone = (x for x in iterable if x is not None)
>>> for x in iterable_nonone:
... print(x)
...
1
2
3
我正在 Python 中制作用于 LAN 主机发现的脚本(没有 scapy 是的,我知道,尝试使用套接字库来获得学习经验)。我能够发现主机,但无法将实时主机与 return 没有响应的主机分开,因为我唯一的指示器是超时响应(ping,它是浮点数或 None ),但我无法迭代 ping,因为它可能是非类型,所以我尝试使用 hasattr 检查主机,但我得到一个空字典。有没有更好的方法可以遍历主机?我可以使主机列表成为字典,但这并不能解决遍历非类型的问题。感谢任何输入,谢谢。
`if __name__ == '__main__':
live = []
livee = []
for host, ping in multi_ping_query(subnet).iteritems():
subnet = host, '=', ping
print(subnet)
live.append(subnet)
for ping in live:
check = hasattr(ping, 'Nonetype')
if check == False:
livee.append(host)
print(livee)
这是 multi_ping_query 的函数,我尝试将它调整为 return 一个字符串,如果它没有连接,但是我也没有成功。
def multi_ping_query(hosts, timeout=1, step=512, ignore_errors=False):
results, host_list, id = {}, [], 0
for host in hosts:
try:
host_list.append(socket.gethostbyname(host))
except socket.gaierror:
results[host] = None
while host_list:
sock_list = []
for ip in host_list[:step]: # select supports only a max of 512
id += 1
sock_list.append(PingQuery(ip, id, timeout))
host_list.remove(ip)
# use timeout
asyncore.loop(timeout)
for sock in sock_list:
results[sock.get_host()] = sock.get_result()
return results
无需测试您的代码,但如果我理解正确,只需使用 "is None" 再次检查 None 类型:
if ping is not None:
live.append(host)
通常,您可以通过迭代以下生成器来迭代任何可迭代对象,同时排除 None
值:
>>> iterable = [1, None, 2, 3, None]
>>> iterable_nonone = (x for x in iterable if x is not None)
>>> for x in iterable_nonone:
... print(x)
...
1
2
3