得到 IndexError 时使数组重复

Make array repeat when got IndexError

我想要一个数组在代码抛出 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)])

如果你想要一个循环迭代器,使用itertools.cycle。如果你只想在索引时循环行为,你可以使用基于模的索引。

In [20]: a = [1, 2, 3, 4, 5]

In [21]: pos = 9

In [22]: a[pos % len(a)]
Out[22]: 5

那是因为当 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 块中。 ^.^

您想打印 a[pos % len(a)],而不是 a[pos - len(a)],因为任何大于 10 的负 5 都大于 5。