當代碼拋出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
提交
取消