التغلب على خطأ Python TypeError: لا يمكن تفسير كائن ‘list’ كعدد صحيح
مرونة Python تؤدي أحيانًا إلى خطأ محبط وهو TypeError: 'list' object cannot be interpreted as an integer
. يحدث هذا الخطأ عادةً عندما تحاول استخدام قائمة في سياق يتوقع فيه قيمة عددية واحدة (عدد صحيح). سيشرح هذا الدليل الشامل السيناريوهات الشائعة التي تسبب هذا الخطأ ويوفر حلولًا فعالة.
محتويات
- فهم الخطأ
- السيناريو الأول: فهرسة القائمة غير الصحيحة
- السيناريو الثاني: العمليات الحسابية مع القوائم
- السيناريو الثالث: وسيطات الدالة غير الصحيحة
- السيناريو الرابع: استخدام القوائم كعدادات الحلقة
- أفضل الممارسات لتجنب الخطأ
- الخلاصة
فهم الخطأ
المشكلة الأساسية هي عدم تطابق الأنواع. يتوقع Python عددًا صحيحًا لتمثيل موضع (فهرس) في تسلسل، أو عامل حسابي في تعبير حسابي، أو وسيطًا رقميًا في دعوة دالة. عندما تقدم قائمة بدلاً من ذلك، لا يمكنه إجراء العملية المقصودة، مما يؤدي إلى الخطأ.
السيناريو الأول: فهرسة القائمة غير الصحيحة
خطأ شائع هو استخدام قائمة مباشرة كفهرس عند الوصول إلى عناصر من قائمة أو تسلسل آخر.
خطأ:
my_list = [10, 20, 30]
index_list = [0, 1]
value = my_list[index_list] # خطأ: index_list قائمة، وليس عددًا صحيحًا
صحيح:
my_list = [10, 20, 30]
index_list = [0, 1]
values = [my_list[i] for i in index_list] # صحيح: التكرار خلال index_list والوصول إلى كل عنصر على حدة
print(values) # الإخراج: [10, 20]
السيناريو الثاني: العمليات الحسابية مع القوائم
لا يمكنك إجراء عمليات حسابية (جمع، طرح، إلخ) مباشرة مع القوائم.
خطأ:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list1 + list2 # هذا هو دمج القوائم، وليس الجمع لكل عنصر.
صحيح: للعمليات لكل عنصر، استخدم الحلقات أو التعبيريات القائمة:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = [x + y for x, y in zip(list1, list2)] # الجمع لكل عنصر
print(result) # الإخراج: [5, 7, 9]
#أو باستخدام numpy
import numpy as np
list1 = np.array([1, 2, 3])
list2 = np.array([4, 5, 6])
result = list1 + list2
print(result) # الإخراج: [5 7 9]
السيناريو الثالث: وسيطات الدالة غير الصحيحة
بعض الدوال تتوقع وسيطات عدد صحيح. تمرير قائمة حيث يُتوقع عدد صحيح سيؤدي إلى هذا الخطأ.
خطأ:
def my_function(num):
return num * 2
my_list = [1, 2, 3]
result = my_function(my_list) # خطأ: my_function تتوقع عددًا صحيحًا
صحيح:
def my_function(num):
return num * 2
my_list = [1, 2, 3]
results = [my_function(x) for x in my_list] # صحيح: تطبيق الدالة على كل عنصر على حدة
print(results) # الإخراج: [2, 4, 6]
السيناريو الرابع: استخدام القوائم كعدادات الحلقة
يجب عليك استخدام الأعداد الصحيحة أو النطاقات لعدادات الحلقة. القوائم ليست مناسبة.
خطأ:
my_list = [1, 2, 3]
for i in my_list:
print(i) #هذا صحيح، لكن المثال التالي غير صحيح.
my_list = [1, 2, 3]
for i in range(len(my_list)):
print(my_list[i]) #هذا صحيح، لكن المثال التالي غير صحيح.
my_list = [1, 2, 3]
my_other_list = [4, 5, 6]
for i in my_list:
print(my_other_list[i]) #خطأ: استخدام قائمة كفهرس
صحيح:
my_list = [1, 2, 3]
for i in range(len(my_list)): # استخدام range(len(my_list)) للوصول القائم على الفهرس
print(my_list[i])
أفضل الممارسات لتجنب الخطأ
- تأكد دائمًا من أن الفهارس المستخدمة للوصول إلى العناصر في القوائم هي أعداد صحيحة.
- استخدم الأساليب المناسبة (الحلقات، التعبيريات القائمة، NumPy) للعمليات لكل عنصر على القوائم.
- افحص توقيعات الدوال بعناية لفهم أنواع البيانات المتوقعة للوسيطات.
- استخدم range() أو enumerate() للتكرار عبر القوائم عندما تحتاج إلى كل من الفهرس والقيمة.
الخلاصة
ينبع خطأ TypeError: 'list' object cannot be interpreted as an integer
من استخدام القوائم حيث تُتوقع الأعداد الصحيحة. من خلال فهم السيناريوهات الشائعة وتطبيق الحلول المقترحة وأفضل الممارسات، يمكنك منع هذا الخطأ وحله بشكل فعال في رمز Python الخاص بك.