当代码抛出IndexError时,我希望数组循环。这是示例:a = [1, 2, 3, 4, 5]a[x] -> output0 -> 11 -> 2...4 -> 5after except IndexError5 -> 16 -> 2...9 -> 510 -> IndexError (Should be 1)我的代码可以工作,但是当pos> 9时,它仍会引发IndexError。pos = 5try: a = [1, 2, 3, 4, 5] print(a[pos])except IndexError: print(a[pos - len(a)])
3 回答
冉冉说
TA贡献1877条经验 获得超1个赞
如果需要循环迭代器,请使用itertools.cycle。如果在索引时只需要循环行为,则可以使用基于模的索引。
In [20]: a = [1, 2, 3, 4, 5]
In [21]: pos = 9
In [22]: a[pos % len(a)]
Out[22]: 5
RISEBY
TA贡献1856条经验 获得超5个赞
这是因为当pos > 4 and pos < 10您的代码引发IndexError异常,然后运行a[pos - len(a)]该异常时,将提供所需的结果。
但是,当时pos >= 10,控件将转到Except块,但是该语句a[pos - len(a)]也将给出IndexError异常,因为pos - len(a)len(a)是一个常数,所以它将大于4。
我建议您实现一个循环迭代器,关于该循环迭代器在他的回答中提到了Coldspeed,或者如果您想采用这种方法,请执行以下操作:
except IndexError:
print(a[pos % len(a)])
PS您也不需要将整个内容放在try-except块中。^。^
添加回答
举报
0/150
提交
取消