پرهیز از خطای شاخص هنگام کار کردن با لیست‌ها

هنگامی که برای اولین بار با لیست‌ها کار می‌کنید عموماً به نوعی خطا برمی‌خورید. فرض کنید لیستی شامل سه عضو داریم و عضو چهارم آن را فرامی‌خوانیم:

1
2
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[3])

این مثال به خطای شاخص منجر می‌شود:

1
2
3
4
Traceback (most recent call last):
File "motorcycles.py", line 2, in <module>
print(motorcycles[3])
IndexError: list index out of range

پایتون برای یافتن عنصری با شاخص ۳ تلاش می‌کند امّا پس از جستجو عضوی با این شماره پیدا نمی‌کند. به دلیل ماهیت یکی‌جابه‌جای شماره‌گذاری در لیست‌ها این خطا متداول است. همه فکر می‌کنند که شماره‌ی سومین عضو ۳ است زیر شمارش را از ۱ شروع می‌کنند. امّا پایتون شاخص سومین عضو را ۲ می‌پندارد زیرا شمارش را از ۰ شروع می‌کند.

خطای شاخص به این معنی است که پایتون نمی‌تواند عضوی با شاخصی که معلوم کرده‌اید پیدا کند. اگر در برنامه‌تان به این خطا برخوردید شاخص را یکی جابه‌جا کنید. برنامه را مجدداً اجرا کنید و ببینید آیا نتایج درست است یا نه.

به خاطر داشته باشید که همیشه می‌توانید با به‌کارگیری شاخص ۱- به آخرین عضو لیست دسترسی پیدا کنید. این مورد همیشه کار می‌کند حتّی اگر طول لیست شما از آخرین باری که به آن دسترسی داشته‌اید تغییر کرده باشد:

1
2
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[-1])

شاخص ۱- همیشه آخرین عضو لیست را برمی‌گرداند که در این مورد مقدار ‘suzuki’ است:

1
suzuki

تنها زمانی این رویکرد به خطا می‌خورد که آخرین عضو یک لیست تهی را درخواست کنید:

1
2
motorcycles = []
print(motorcycles[-1])

motorcycles هیچ عضوی ندارد پس پایتون خطای شاخص دیگری برمی‌گرداند:

1
2
3
4
Traceback (most recent call last):
File "motorcyles.py", line 3, in <module>
print(motorcycles[-1])
IndexError: list index out of range
نکته
اگر خطای شاخص رخ می‌دهد و نمی‌توانید بفهمید که چگونه آن را برطرف کنید لیست خود یا تنها طول آن را چاپ کنید. لیست شما ممکن است با آن‌چه می‌پنداشتید خیلی تفاوت داشته باشد، به ویژه در مواردی که آن را به صورت پویا در برنامه مدیریت می‌کنید. دیدن لیست واقعی یا تعداد دقیق اعضای آن می‌تواند به سردرآوردن از این خطاهای منطقی کمک کند.