[英]Why do I get an 'IndexError: list index out of range' when I try to remove a record from my list in the except block
当我尝试运行此函数时,出现索引错误:列表超出范围。 当我尝试使用list.remove(list[i])
时,错误发生在代码的except块中。 不知道为什么我会超出范围的错误,任何帮助将不胜感激!
我已经尝试过使用函数周围的各种打印语句进行调试,并且我发现我的记录很好,每当我尝试删除except块中的记录时,它只会抛出此错误。
def subnet_insertion_sort(list):
with open('bad_subnets.csv', 'w') as z:
# Traverse through 1 to len(list)
for i in range(1, len(list)):
# extracts subnet from current list observed in list
# and casts it as a ip_network objects
try:
key_subnet = ipaddress.ip_network(unicode(list[i][0]))
j = i - 1
# Move elements of list[0..i-1], that are
# greater than key, to one position ahead
# of their current position
while (j >= 0 and key_subnet < ipaddress.ip_network(unicode(list[j][0]))):
temp = list[j]
list[j] = list[j + 1]
list[j + 1] = temp
j -= 1
except:
print("invalid subnet found: " + list[i][0] + " on line " + str(i) + ". It has been added to bad_subnets.csv")
writer_z = csv.writer(z)
writer_z.writerow(list[i])
list.remove(list[i])
continue
return list
我的预期结果是该函数正常运行,并且我收到了一个没有无效子网的列表,但是我的实际输出是索引错误:列表超出范围。
一旦您开始for循环
for i in range(1,len(list))
如果原始列表的长度为10
,它将转换为
for i in range(1,10)
如果在循环中从列表中删除项目,则不会更改范围。 一旦范围超过当前列表的长度,将导致索引错误。
从不更改列表,而是创建一个新列表:
def subnet_insertion_sort(ipaddresses):
valid_addresses = []
with open('bad_subnets.csv', 'w') as z:
writer_z = csv.writer(z)
for i, address in enumerate(ipaddresses):
try:
key_subnet = ipaddress.ip_network(address)
except ValueError:
print("invalid subnet found: {} on line {} It has been added to bad_subnets.csv".format(address, i)
writer_z.writerow(address)
else:
valid_addresses(key_subnet)
return sorted(valid_addresses)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.