خطأ TypeError: 'float' object cannot be interpreted as an integer
هو خطأ شائع في بايثون ينشأ عند استخدام رقم ذي فاصلة عشرية (عدد عشري) حيث يُتوقع عدد صحيح (عدد كامل). يحدث هذا غالبًا مع الدوال أو العمليات التي تحتاج إلى مدخلات صحيحة، مثل الفهرسة أو التكرار أو معالجة المصفوفات.
فهم المشكلة
يميز بايثون بين أنواع البيانات. int
يمثل الأعداد الصحيحة (مثل: 10، -5، 0)، بينما float
يمثل الأعداد العشرية (مثل: 3.14، -2.5، 0.0). تتطلب العديد من الدوال أعدادًا صحيحة. يؤدي استخدام عدد عشري حيث يُحتاج إلى عدد صحيح إلى حدوث هذا الخطأ.
السيناريوهات الشائعة والحلول
- الفهرسة: لا يمكن للأعداد العشرية أن تفهرس القوائم أو الأزواج أو السلاسل.
- التكرار (
range()
): يحتاجrange()
إلى أعداد صحيحة للبداية والنهاية والخطوة. - الدوال المدمجة (
len()
): على الرغم من أنه أقل شيوعًا، إلا أن الخطأ قد ينشأ بشكل غير مباشر إذا كان المتغير المستخدم في حساب الطول عددًا عشريًا. - المكتبات والوحدات: قد تحتوي مكتبات الجهات الخارجية على دوال تتوقع مدخلات صحيحة. تحقق من وثائقها.
- التحويل الضمني للنوع: قد ينتج عن عملية حسابية عدد عشري يُستخدم لاحقًا حيث يُحتاج إلى عدد صحيح.
my_list = [10, 20, 30]
index = 1.5 # خطأ: عدد عشري كفهرس
print(my_list[index]) # يسبب TypeError
الحل: قم بتحويل العدد العشري إلى عدد صحيح باستخدام int()
. هذا يقطع الجزء العشري (لا يقوم بالتدوير).
my_list = [10, 20, 30]
index = int(1.5) # يحول 1.5 إلى 1
print(my_list[index]) # المخرجات: 20
for i in range(0.0, 10.0): #خطأ: عدد عشري في range
print(i) # يسبب TypeError
الحل: استخدم أعدادًا صحيحة.
for i in range(0, 10): # صحيح: أعداد صحيحة
print(i)
my_string = "hello"
length = len(my_string) #صحيح
float_length = 5.0
#الاستخدام الخاطئ سيكون شيئًا كهذا:
#new_string = my_string[:float_length] # يسبب TypeError
x = 5 / 2 # x يصبح 2.5 (عدد عشري)
my_list = [1, 2, 3]
print(my_list[x]) # يسبب TypeError
الحل: استخدم القسمة الصحيحة (//
):
x = 5 // 2 # x يصبح 2 (عدد صحيح)
my_list = [1, 2, 3]
print(my_list[x]) # المخرجات: 3
نصائح تصحيح الأخطاء
- أوامر الطباعة: استخدم
print()
للتحقق من قيم المتغيرات وأنواعها. - التحقق من النوع: استخدم
type()
:print(type(my_variable))
. - التحليل الثابت: يمكن أن تساعد أدوات مثل أدوات الفحص الثابت (مثل Pylint).
بفهم هذه الأسباب والحلول، يمكنك حل هذا الخطأ وكتابة شفرة بايثون أكثر قوة. تحقق دائمًا من أنواع البيانات المتوقعة للدوال والعمليات.