خطأ TypeError: list indices must be integers or slices, not list
عقبة شائعة في برمجة بايثون، تعترض طريق المبتدئين والمتطورين على حد سواء. ينشأ هذا الخطأ عندما تحاول الوصول إلى عنصر قائمة باستخدام شيء آخر غير مؤشر صحيح (أو شريحة، والتي تمثل نطاقًا من الأعداد الصحيحة). سيشرح هذا الدليل الأسباب الجذرية لهذا الخطأ ويقدم حلولًا عملية.
جدول المحتويات
فهم الخطأ
قوائم بايثون هي مجموعات مرتبة. يتطلب الوصول إلى عناصر فردية مؤشرها، بدءًا من 0. على سبيل المثال، في my_list = [10, 20, 30]
، يُعطي my_list[0]
قيمة 10، وmy_list[1]
يُرجع 20، وهكذا. يشير خطأ TypeError
إلى أنك استخدمت قيمة غير صحيحة (أو غير شريحة) كمؤشر، مثل قائمة، أو مجموعة، أو سلسلة، أو نوع بيانات آخر.
الأسباب الشائعة والحلول
1. الفهرسة غير الصحيحة مع القوائم المتداخلة
هذا سيناريو شائع. ضع في اعتبارك:
my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(my_list[0]) # الإخراج: [1, 2, 3] - صحيح
print(my_list[[0,1]]) # TypeError! خطأ
print(my_list[0][1]) # الإخراج: 2 - الوصول الصحيح إلى العنصر المتداخل
my_list[[0,1]]
يستخدم بشكل خاطئ [0,1]
كمؤشر. الوصول إلى العناصر المتداخلة بشكل متسلسل: my_list[0][1]
يسترجع بشكل صحيح العنصر في المؤشر 1 داخل القائمة في المؤشر 0.
2. استخدام متغيرات تحتوي على قوائم كمؤشرات
my_list = [10, 20, 30]
index = [1] # index قائمة!
print(my_list[index]) # TypeError!
هنا، index
يحمل قائمة، تم استخدامها بشكل خاطئ كمؤشر. تأكد من أن متغير المؤشر يحمل عددًا صحيحًا:
my_list = [10, 20, 30]
index = 1
print(my_list[index]) # الإخراج: 20 - صحيح
3. أنواع المتغيرات غير الصحيحة
أي مؤشر غير صحيح (سلاسل، أعداد عشرية، إلخ) سيسبب هذا الخطأ.
my_list = [10, 20, 30]
print(my_list["0"]) # TypeError! (مؤشر سلسلة)
print(my_list[1.0]) # TypeError! (مؤشر عشري)
4. أخطاء خارج النطاق (Off-by-One)
تبدأ مؤشرات القائمة من 0. الوصول إلى ما هو أبعد من طول القائمة يثير خطأ IndexError
؛ المؤشرات السالبة خارج النطاق المسموح به تسبب أيضًا أخطاء. تحقق دائمًا من منطق الفهرسة الخاص بك.
استراتيجيات تصحيح الأخطاء
- طباعة مؤشراتك: قبل استخدام مؤشر، قم بطباعة قيمته للتأكد من أنه عدد صحيح.
- استخدم مصحح الأخطاء: تخطى خلال رمزك سطرًا بسطر، وافحص قيم المتغيرات لتحديد مصدر الخطأ.
- تحقق من القوائم المتداخلة: افحص بعناية كيفية وصولك إلى العناصر في القوائم المتداخلة.
من خلال فهم هذه الأسباب ومراجعة فهرسة رمزك بعناية، يمكنك حل هذه المشكلة الشائعة في بايثون بفعالية. استخدم دائمًا أعدادًا صحيحة (أو شرائح) عند الوصول إلى عناصر القائمة.