在for循环中跳过IndexError

时间:2015-11-04 20:36:47

标签: python python-2.7 for-loop indexing

如何跳过错误" 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)并获取找到的值?

2 个答案:

答案 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