Computer >> Máy Tính >  >> Lập trình >> Python

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

Giống như danh sách, các bộ dữ liệu Python được lập chỉ mục. Điều này có nghĩa là mỗi giá trị trong một bộ giá trị có một số mà bạn có thể sử dụng để truy cập giá trị đó. Khi bạn cố gắng truy cập một mục trong bộ tuple không tồn tại, Python sẽ trả về lỗi cho biết "chỉ mục tuple nằm ngoài phạm vi".

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

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

Các bộ giá trị được lập chỉ mục bắt đầu từ 0. Mọi giá trị tiếp theo trong bộ mã số được gán một số lớn hơn giá trị cuối cùng. Hãy xem một 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 của nó:

Robin Chim bồ câu có xương Tít tuyệt vời Goldfinch Chaffinch
1 2 3 4

Để truy cập giá trị “Robin” trong bộ giá trị của chúng tôi, chúng tôi sẽ sử dụng mã này:

print(birds[0])

Mã của chúng tôi trả về:Robin. Chúng tôi truy cập giá trị ở vị trí chỉ mục 1 và in nó ra bảng điều khiển. Chúng tôi có thể làm điều này với bất kỳ giá trị nào trong danh sách của chúng tôi.

Nếu chúng tôi cố gắng truy cập vào một mục nằm ngoài bộ của chúng tôi, thì sẽ xảy ra lỗi.

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

Một tình huống mẫu

Hãy viết một chương trình in ra ba giá trị cuối cùng trong một bộ giá trị. Tuple của chúng tôi chứa danh sách các thành phố của Vương quốc Anh. Hãy bắt đầu bằng cách khai báo một tuple:

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

Tiếp theo, chúng tôi in ra ba giá trị cuối cùng. Chúng tôi sẽ thực hiện việc này bằng vòng lặp for và range() tuyên bố. Câu lệnh range () tạo một danh sách các số giữa một phạm vi cụ thể để chúng tôi có thể lặp lại các mục trong danh sách của chúng tôi có số chỉ mục nằm trong phạm vi đó.

Đây là mã cho vòng lặp for của chúng tôi:

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

Hãy thử chạy mã của chúng tôi:

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

Mã của chúng tôi in ra các giá trị Goldfinch và Chaffinch. Đây là hai giá trị cuối cùng trong danh sách của chúng tôi. Nó không in ra giá trị thứ ba.

Giải pháp

range() của chúng tôi câu lệnh tạo danh sách các số trong phạm vi từ 3 đến 6. Danh sách này bao gồm 3 và không bao gồm 6. Danh sách của chúng tôi chỉ được lập chỉ mục tối đa 4. Điều này có nghĩa là vòng lặp của chúng tôi sẽ cố gắng truy cập vào một con chim ở vị trí chỉ mục 5 trong bộ của chúng tôi vì 5 nằm trong phạm vi của chúng tôi.

Hãy xem điều gì sẽ xảy ra nếu chúng ta cố gắng in ra từng con chim [5]:

print(birds[5])

Mã của chúng tôi 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 một lỗi hiện nay. Điều này là do chúng tôi cố gắng truy cập các mục trong danh sách của mình như thể chúng được lập chỉ mục từ 1. Các bộ giá trị được lập chỉ mục từ 0.

Để giải quyết lỗi này, chúng tôi cần sửa đổi range() của chúng tôi vì vậy nó chỉ in ba mục cuối cùng trong bộ tuple của chúng tôi. Phạm vi của chúng tôi nên đi từ 2 đến 5:

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

Hãy chạy mã đã sửa đổi của chúng tôi và xem điều gì sẽ xảy ra:

Great Tit
Goldfinch
Chaffinch

Mã của chúng tôi in ra thành công ba mục cuối cùng trong danh sách của chúng tôi. Chúng tôi hiện đang truy cập các mục ở các vị trí chỉ mục 2, 3 và 4. Tất cả các vị trí này đều hợp lệ nên mã của chúng tôi hiện hoạt động.

Kết luận

Lỗi IndexError:tuple index out of range xảy ra khi bạn cố gắng truy cập một mục trong bộ tuple không tồn tại. Để giải quyết vấn đề này, hãy đảm bảo rằng bất cứ khi nào bạn truy cập một mục từ bộ tuple thì mục bạn đang tìm vẫn tồn tại.

Nguyên nhân phổ biến nhất của lỗi này là quên rằng các bộ giá trị được lập chỉ mục từ 0. Bắt đầu đếm từ 0 khi bạn đang cố gắng truy cập một giá trị từ một bộ giá trị. Là một người mới bắt đầu, điều này có thể cảm thấy kỳ lạ. Khi bạn dành nhiều thời gian hơn để viết mã bằng Python, việc đếm từ 0 sẽ trở thành bản chất thứ hai.

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