如何跳过错误" IndexError:list index超出范围"继续进行剩下的for循环?例如,我有:
from bisect import bisect
thelist = [1, 2, 3, 6, 7, 8, 9]
thevalues = [.1, .2, .3, .6, .7, .8, .9]
my_items = [10, 1, 9, 4, 3]
found_list = []
found_values = []
for i in my_items:
position = bisect(thelist, i)
found_list.append(thelist[position])
found_values.append(thevalues[position])
期望的输出:
found_list = [1, 9, 3]
found_values = [.1, .9, .3]
但是因为10不在列表中。我第一次在循环中遇到错误。即使my_items'中有价值观也是如此。我不会跳过这些(以时间有效的方式而不必更改my_list)并获取找到的值?
答案 0 :(得分:0)
您应该检查有效索引:
for i in my_items:
position = bisect(thelist, i)
if position < len(thelist):
found_list.append(thelist[position])
found_values.append(thevalues[position])
答案 1 :(得分:0)
您在这里寻找try-except
。它是一种管理控制流的方法,允许您尝试执行可能引发错误的操作(例如IndexError
)并进行一些清理。它看起来像这样:
for i in my_items:
try:
position = bisect(thelist, i)
found_list.append(thelist[position])
found_values.append(thevalues[position])
except IndexError:
print('{0} is not in thelist'.format(position))
作为一个附带好处,这实际上是非常Pythonic。如果您有兴趣了解有关使用try-except
管理控制流的更多信息,请查看this blog-post。