Last Updated on 2021-10-11 by Clay
這是一個初學 Python 時最容易不小心犯的錯誤。這個錯誤通常是由存取了超過陣列(List)長度的索引而引起的:
IndexError: list index out of range
問題還原
以下是一段重複這個錯誤的範例程式碼:
a = [1, 2, 3]
print(a[3])
Output:
Traceback (most recent call last):
File "/Users/clay/Projects/PythonProjects/python_children_edu/test.py", line 2, in <module>
print(a[3])
IndexError: list index out of range
我們可以看到,我們所建立的列表只有 3 個元素,按照索引從 0 開始計算的規則,我們所建立的變數 a 的索引值只有 0、1、2。
所以一旦我們輸入了 3 要提取這個索引對應的列表元素時,Python 的直譯器(interpreter)就報錯了。
所以我們現在也能直接地理解 IndexErorr: list index out of range
這個錯誤訊息了:索引錯誤、列表的索引超出範圍。
解決方法
解決方法其實只有一種,那就是不要讓使用超過列表長度的索引。
比方說剛才的程式碼,我們將過長的索引值進行修改:
a = [1, 2, 3]
print(a[2])
Output:
3
我們能發現程式碼正常運作了。
但要注意的是,有時候並不是由於我們直接寫下的程式碼引起這個錯誤;很多時候,是我們呼叫了其他套件或模組,並在不確定那些套件或模組提供的列表長度的情況下呼叫過大的索引值。
所以,沉著氣一遍遍檢查究竟是在哪個環節出錯了,依照錯誤訊息提供的行號也是一個很好的切入點。
不用懷疑 Python 提供的錯誤訊息是否有問題,Python 提供的錯誤訊息已經比許多程式語言來得更精確了。
祝大家 debugging 順利。
References
- https://blog.finxter.com/python-indexerror-list-index-out-of-range/
- https://careerkarma.com/blog/python-indexerror-list-index-out-of-range/