python - 每次我打印一个列表时,它都会打印元素 2 次。我怎样才能防止这种情况发生?
问题描述
import os
from netaddr import *
import sys
import socket
from pprint import pprint
from collections import defaultdict
import itertools
import bisect
ip_list = []
server_list = []
while True:
try:
server = (input('> '))
if server == 'q':
break
ip_addr = socket.gethostbyname(server)
except socket.gaierror:
print(server, 'can\'t find server/ip', '\n')
ip_list.append(ip_addr)
server_list.append(server)
print(ip_list)
输出(在这种情况下我输入 2 个服务器并返回 2 个 IP):
['10.0.0.1', '10.0.0.2']
现在,当我将该列表插入到脚本的总体用途中时,它会两次打印出该列表。为简单起见,“网络”会拉出子网/路由列表,但我将忽略该代码,因为它与手头的问题无关。
for ip_address in ip_list:
if IPAddress(ip_address) in IPNetwork(network):
print(ip_address)
输出:
10.0.0.1
10.0.0.2
10.0.0.1
10.0.0.2
如何使地址打印一次而不是两次?
解决方案
在循环完成后执行print(ip_list)
,因此您只打印一次,而不是每次附加到它之后。
此外,您应该附加到try
. 否则,当您收到错误时,您仍然会附加服务器,并且还会附加上一个服务器的地址。
ip_list = []
server_list = []
while True:
try:
server = (input('> '))
if server == 'q':
break
ip_addr = socket.gethostbyname(server)
ip_list.append(ip_addr)
server_list.append(server)
except socket.gaierror:
print(server, 'can\'t find server/ip', '\n')
print(ip_list)
print(server_list)
推荐阅读
- jenkins-pipeline - Nexusartifactuploader 批量上传多个工件
- javascript - 为什么 getElementById() 不能在 owl-carousel 中工作?
- c++ - pybind11中的问题,使用makefile的c ++项目
- javascript - 如何将字符串数组转换为二维数组?
- javascript - 要使用 setInterval() 还是 interval()?- 角 11
- algorithm - 找到这个简单算法的循环不变量
- python - 仅在匹配 python 时复制所有行
- java - 来自 XSSFWorkbook 类型的方法 getSheetAt(int) 指的是缺少的类型 XSSFSheet
- octopus-deploy - Continua with Octopus 部署“RessourceNotFound”并进行重大更改
- .net-core - DotNet5 Console 应用程序在 Linux 上出现错误,但 DotNetCore 3.1 应用程序运行良好