Python Tutorials

استكشاف أخطاء TypeError: لا يمكن تفسير كائن ‘float’ كعدد صحيح في بايثون

Spread the love

خطأ TypeError: 'float' object cannot be interpreted as an integer هو خطأ شائع في بايثون ينشأ عند استخدام رقم ذي فاصلة عشرية (عدد عشري) حيث يُتوقع عدد صحيح (عدد كامل). يحدث هذا غالبًا مع الدوال أو العمليات التي تحتاج إلى مدخلات صحيحة، مثل الفهرسة أو التكرار أو معالجة المصفوفات.

فهم المشكلة

يميز بايثون بين أنواع البيانات. int يمثل الأعداد الصحيحة (مثل: 10، -5، 0)، بينما float يمثل الأعداد العشرية (مثل: 3.14، -2.5، 0.0). تتطلب العديد من الدوال أعدادًا صحيحة. يؤدي استخدام عدد عشري حيث يُحتاج إلى عدد صحيح إلى حدوث هذا الخطأ.

السيناريوهات الشائعة والحلول

  1. الفهرسة: لا يمكن للأعداد العشرية أن تفهرس القوائم أو الأزواج أو السلاسل.
  2. 
    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
    
  3. التكرار (range()): يحتاج range() إلى أعداد صحيحة للبداية والنهاية والخطوة.
  4. 
    for i in range(0.0, 10.0): #خطأ: عدد عشري في range
        print(i) # يسبب TypeError
    

    الحل: استخدم أعدادًا صحيحة.

    
    for i in range(0, 10):  # صحيح: أعداد صحيحة
        print(i)
    
  5. الدوال المدمجة (len()): على الرغم من أنه أقل شيوعًا، إلا أن الخطأ قد ينشأ بشكل غير مباشر إذا كان المتغير المستخدم في حساب الطول عددًا عشريًا.
  6. 
    my_string = "hello"
    length = len(my_string) #صحيح
    float_length = 5.0
    #الاستخدام الخاطئ سيكون شيئًا كهذا:
    #new_string = my_string[:float_length] # يسبب TypeError
    
  7. المكتبات والوحدات: قد تحتوي مكتبات الجهات الخارجية على دوال تتوقع مدخلات صحيحة. تحقق من وثائقها.
  8. التحويل الضمني للنوع: قد ينتج عن عملية حسابية عدد عشري يُستخدم لاحقًا حيث يُحتاج إلى عدد صحيح.
  9. 
    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).

بفهم هذه الأسباب والحلول، يمكنك حل هذا الخطأ وكتابة شفرة بايثون أكثر قوة. تحقق دائمًا من أنواع البيانات المتوقعة للدوال والعمليات.

محتويات

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *