Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Lỗi Python IndexError: tuple index out of range - Giải pháp

Giống list, Python tuple được lập chỉ mục (indexed). Nghĩa là mỗi giá trị trong tuple có số dùng truy cập giá trị đó. Khi bạn truy cập mục trong tuple không tồn tại, Python trả về lỗi "tuple index out of range".

Trong hướng dẫn này, giải thích lỗi Python phổ biến này nghĩa là gì và tại sao nó xảy ra. Chúng ta đi qua tình huống ví dụ có vấn đề này để tìm ra cách giải quyết.

Phân tích vấn đề: IndexError: tuple index out of range

Tuple được lập chỉ mục từ 0. Mỗi giá trị tiếp theo trong tuple gán số lớn hơn giá trị trước 1. Xem tuple:

birds = ("Robin", "Collared Dove", "Great Tit", "Goldfinch", "Chaffinch")

Tuple này chứa năm giá trị. Mỗi giá trị có số chỉ mục riêng:

RobinCollared DoveGreat TitGoldfinchChaffinch
1234

Để truy cập giá trị "Robin" trong tuple, dùng mã:

print(birds[0])

Mã trả về: Robin. Truy cập giá trị vị trí chỉ mục 1 và in ra console. Chúng ta làm tương tự với bất kỳ giá trị nào trong danh sách.

Nếu thử truy cập mục ngoài tuple, lỗi sẽ nêu lên.

81% người tham gia cho biết họ cảm thấy tự tin hơn về cơ hội việc làm công nghệ sau khi tham gia bootcamp. Được ghép nối với bootcamp ngay hôm nay.

Sinh viên trung bình tốt nghiệp bootcamp mất chưa đến sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được việc đầu tiên.

Tình huống ví dụ

Hãy viết chương trình in ba giá trị cuối trong tuple. Tuple chứa danh sách thành phố Vương quốc Anh. Hãy khai báo tuple:

cities = ("Edinburgh", "London", "Southend", "Bristol", "Cambridge")

Tiếp theo, in ba giá trị cuối. Làm bằng vòng for và câu lệnh range(). Câu lệnh range() tạo danh sách số giữa phạm vi cụ thể để lặp qua mục trong danh sách có số chỉ mục trong phạm vi đó.

Đây là mã vòng for:

for i in range(3, 6): print(birds[i])

Hãy thử chạy mã:

Goldfinch Chaffinch Traceback (most recent call last): File "main.py", line 4, in <module> print(birds[i]) IndexError: tuple index out of range

Mã in giá trị Goldfinch và Chaffinch. Hai giá trị cuối trong danh sách. Không in giá trị thứ ba.

Giải pháp

Câu lệnh range() tạo danh sách số giữa 3 và 6. Danh sách bao gồm 3 và loại trừ 6. Danh sách chỉ lập chỉ mục đến 4. Nghĩa là vòng lặp sẽ cố truy cập chim vị trí chỉ mục 5 trong tuple vì 5 trong phạm vi.

Hãy xem xảy ra gì nếu thử in birds[5] riêng:

print(birds[5])

Mã trả về:

Traceback (most recent call last): File "main.py", line 3, in <module> print(birds[5]) IndexError: tuple index out of range

Cùng lỗi. Vì chúng ta truy cập mục trong danh sách như thể lập chỉ mục từ 1. Tuple lập chỉ mục từ 0.

Để khắc phục lỗi, cần sửa câu lệnh range() để chỉ in ba mục cuối tuple. Phạm vi nên từ 2 đến 5:

for i in range(2, 5): print(birds[i])

Hãy chạy mã sửa và xem:

Great Tit Goldfinch Chaffinch

Mã in thành công ba mục cuối danh sách. Chúng ta giờ truy cập mục vị trí chỉ mục 2, 3, 4. Tất cả vị trí hợp lệ nên mã hoạt động.

Kết luận

Lỗi IndexError: tuple index out of range xảy ra khi bạn truy cập mục trong tuple không tồn tại. Để giải quyết, đảm bảo bất cứ khi nào truy cập mục từ tuple mà mục bạn tìm tồn tại.

Nguyên nhân phổ biến nhất là quên tuple lập chỉ mục từ 0. Bắt đầu đếm từ 0 khi truy cập giá trị từ tuple. Với người mới, cảm giác lạ. Khi dành thời gian code Python, đếm từ 0 sẽ trở thành bản năng.

Bây giờ bạn đã sẵn sàng giải quyết lỗi Python này như chuyên gia!