当代码抛出IndexError时,我希望数组循环。 这是示例:
a = [1, 2, 3, 4, 5]
a[x] -> output
0 -> 1
1 -> 2
...
4 -> 5
after except IndexError
5 -> 1
6 -> 2
...
9 -> 5
10 -> IndexError (Should be 1)
我的代码可以工作,但是当pos> 9时,它仍然抛出IndexError。
pos = 5
try:
a = [1, 2, 3, 4, 5]
print(a[pos])
except IndexError:
print(a[pos - len(a)])
答案 0 :(得分:4)
如果要使用循环迭代器,请使用itertools.cycle
。如果仅在索引时需要循环行为,则可以使用基于模的索引。
In [20]: a = [1, 2, 3, 4, 5]
In [21]: pos = 9
In [22]: a[pos % len(a)]
Out[22]: 5
答案 1 :(得分:0)
这是因为当pos > 4 and pos < 10
时,您的代码引发IndexError异常,然后运行a[pos - len(a)]
,它将给出所需的结果。
但是,当pos >= 10
时,控件将转到Except块,但是语句a[pos - len(a)]
也将给出IndexError异常,因为pos - len(a)
将大于4,因为len(a)是一个常数。
我建议您实现一个循环迭代器,关于该循环迭代器在他的回答中提到了Coldspeed,或者如果您想采用这种方法,则可以执行以下操作:
except IndexError:
print(a[pos % len(a)])
P.S。您也不需要将整个内容放在try-except块中。 ^。^
答案 2 :(得分:0)
您要打印a[pos % len(a)]
,而不是a[pos - len(a)]
,因为任何大于10减5的值都大于5。