เหมือนกับลิสต์ (lists) Python tuples ถูกจัดดัชนี (indexed) หมายความว่าแต่ละค่าใน tuple มีหมายเลขที่คุณสามารถใช้เพื่อเข้าถึงค่านั้นได้ เมื่อคุณพยายามเข้าถึงรายการใน tuple ที่ไม่มีอยู่ Python จะคืนค่าข้อผิดพลาดที่กล่าวว่า "tuple index out of range"
ในคู่มือนี้ เราอธิบายว่าข้อผิดพลาด Python นี้หมายถึงอะไรและทำไมมันจึงถูกยกขึ้น เราจะเดินทางผ่านสถานการณ์ตัวอย่างที่มีปัญหานี้อยู่ เพื่อที่เราจะสามารถหาวิธีแก้ไขได้
การวิเคราะห์ปัญหา: IndexError: tuple index out of range
Tuples ถูกจัดดัชนีเริ่มจาก 0 ค่าต่อไปใน tuple แต่ละค่าถูกกำหนดหมายเลขที่มากกว่าค่าก่อนหน้า 1 มา看看 tuple:
birds = ("Robin", "Collared Dove", "Great Tit", "Goldfinch", "Chaffinch") Tuple นี้มีห้าค่า แต่ละค่ามีหมายเลขดัชนีของตัวเอง:
| Robin | Collared Dove | Great Tit | Goldfinch | Chaffinch |
| 1 | 2 | 3 | 4 |
เพื่อเข้าถึงค่า "Robin" ใน tuple ของเรา เราจะใช้โค้ดนี้:
print(birds[0])
โค้ดของเราคืนค่า: Robin เราเข้าถึงค่าที่ตำแหน่งดัชนี 1 และพิมพ์ไปยังคอนโซล เราสามารถทำได้กับค่าใดๆ ในรายการของเรา
หากเราพยายามเข้าถึงรายการที่อยู่นอก tuple ข้อผิดพลาดจะถูกยกขึ้น
สถานการณ์ตัวอย่าง
มาเขียนโปรแกรมที่พิมพ์ค่าสุดท้ายสามค่าใน tuple tuple ของเราประกอบด้วยรายการเมืองในสหราชอาณาจักร มาเริ่มต้นด้วยการประกาศ tuple:
cities = ("Edinburgh", "London", "Southend", "Bristol", "Cambridge") ต่อไป เราพิมพ์ค่าสุดท้ายสามค่า เราจะทำได้โดยใช้ลูป for และคำสั่ง range() คำสั่ง range() สร้างรายการตัวเลขระหว่างช่วงเฉพาะ เพื่อที่เราสามารถวนซ้ำผ่านรายการในรายการของเราที่หมายเลขดัชนีอยู่ในช่วงนั้น
นี่คือโค้ดสำหรับลูป for ของเรา:
for i in range(3, 6): print(birds[i])
มาลองรันโค้ดของเรา:
Goldfinch Chaffinch Traceback (most recent call last): File "main.py", line 4, in <module> print(birds[i]) IndexError: tuple index out of range
โค้ดของเราพิมพ์ค่า Goldfinch และ Chaffinch นี่คือสองค่าสุดท้ายในรายการของเรา มันไม่พิมพ์ค่าที่สาม
วิธีแก้ไข
คำสั่ง range() ของเราสร้างรายการตัวเลขระหว่างช่วง 3 ถึง 6 รายการนี้รวม 3 และไม่รวม 6 รายการของเราถูกจัดดัชนีเพียงถึง 4 เท่านั้น หมายความว่าลูปของเราจะพยายามเข้าถึงนกที่ตำแหน่งดัชนี 5 ใน tuple ของเรา เพราะ 5 อยู่ในช่วงของเรา
มา看看ว่าจะเกิดอะไรขึ้นหากเราลองพิมพ์ birds[5] แยกต่างหาก:
print(birds[5])
โค้ดของเราคืนค่า:
Traceback (most recent call last): File "main.py", line 3, in <module> print(birds[5]) IndexError: tuple index out of range
ข้อผิดพลาดเดียวกันปรากฏขึ้น นี่เป็นเพราะเราพยายามเข้าถึงรายการในรายการของเรามาว่าพวกมันถูกจัดดัชนีจาก 1 Tuples ถูกจัดดัชนีจาก 0
เพื่อแก้ไขข้อผิดพลาดนี้ เราต้องแก้ไขคำสั่ง range() ของเราให้พิมพ์เฉพาะสามรายการสุดท้ายใน tuple ของเรา ช่วงของเราควรไปจาก 2 ถึง 5:
for i in range(2, 5): print(birds[i])
มารันโค้ดที่แก้ไขแล้วและ看看发生什么:
Great Tit Goldfinch Chaffinch
โค้ดของเราพิมพ์สามรายการสุดท้ายในรายการของเราสำเร็จ เรากำลังเข้าถึงรายการที่ตำแหน่งดัชนี 2, 3, และ 4 ทั้งหมดนี้เป็นตำแหน่งที่ถูกต้อง ดังนั้นโค้ดของเราจึงทำงานได้แล้ว
สรุป
ข้อผิดพลาด IndexError: tuple index out of range เกิดขึ้นเมื่อคุณพยายามเข้าถึงรายการใน tuple ที่ไม่มีอยู่ เพื่อแก้ไขปัญหานี้ ตรวจสอบให้แน่ใจว่าทุกครั้งที่คุณเข้าถึงรายการจาก tuple รายการที่คุณกำลังมองหานั้นมีอยู่จริง
สาเหตุที่พบบ่อยที่สุดของข้อผิดพลาดนี้คือการลืมว่า tuples ถูกจัดดัชนีจาก 0 เริ่มนับจาก 0 เมื่อคุณพยายามเข้าถึงค่าจาก tuple ในฐานะมือใหม่ อาจรู้สึกแปลก แต่เมื่อคุณใช้เวลาเขียนโค้ดใน Python มากขึ้น การนับจาก 0 จะกลายเป็นเรื่องปกติ
ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาด Python นี้อย่างมืออาชีพแล้ว!