Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

แก้ไข Python IndexError: tuple index out of range

เหมือนกับลิสต์ (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 นี้มีห้าค่า แต่ละค่ามีหมายเลขดัชนีของตัวเอง:

RobinCollared DoveGreat TitGoldfinchChaffinch
1234

เพื่อเข้าถึงค่า "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 นี้อย่างมืออาชีพแล้ว!