طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 111 · أساسيات برمجة الحاسب
الدرس 13 · الوحدة 3: القرار والتكرار

الأخطاء وتتبّعها

نتعرّف على أنواع الأخطاء، ونتعلم كيف نجدها ونصلحها. ⏱ نحو 20 دقيقة.

x = 10prnt(x)
بعد هذا الدرس ستستطيع أن:
  • تميّز أخطاء الصياغة ووقت التشغيل والأخطاء المنطقية.
  • تفهم أشهر رسائل الخطأ وحلولها.
  • تكتشف الخطأ المنطقي بتجربة قيم معروفة.
  • تتتبع البرنامج بالطباعة وبمصحّح Thonny.

١ثلاثة أنواع من الأخطاء

كل المبرمجين يخطئون، والمهم أن نعرف كيف نجد الخطأ. الأخطاء ثلاثة أنواع:

النوعمتى يظهرمثال
خطأ صياغةقبل التشغيل: بايثون لا يفهم الكودنسيان القوس أو النقطتين
خطأ وقت التشغيلأثناء التشغيل: الكود صحيح الشكل لكن لا يمكن تنفيذهالقسمة على صفر
خطأ منطقيلا رسالة أبدًا، لكن النتيجة خطأنسيان الأقواس عند حساب المتوسط

٢أشهر رسائل الخطأ

الرسالةمعناهاالحل غالبًا
SyntaxErrorالكتابة غير صحيحةراجع الأقواس وعلامات التنصيص والنقطتين
IndentationErrorالمسافة البادئة خطأاضبط المسافات داخل if والحلقات
NameErrorاسم غير معروفصحّح كتابة الاسم، أو عرّف المتغيّر قبل استخدامه
TypeErrorنوعان لا يجتمعانحوّل النوع بـ int أو str
ValueErrorقيمة لا تصلح للتحويلتأكد من المدخلات
ZeroDivisionErrorقسمة على صفرافحص المقسوم عليه قبل القسمة
main.py
total = 100count = 0print(total / count)
Shell×
>>> %Run main.py
Traceback (most recent call last):
File "main.py", line 3, in <module>
print(total / count)
ZeroDivisionError: division by zero
>>>

٣الخطأ المنطقي: الأخطر

هنا لا تظهر رسالة، لكن الجواب خطأ. المطلوب متوسط 80 و 90، وهو 85:

main.py
a = 80b = 90print(a + b / 2)
Shell×
>>> %Run main.py
125.0
>>>

الناتج 125! لأن القسمة نُفّذت قبل الجمع. والتصحيح (a + b) / 2. لذلك جرّب برنامجك دائمًا بقيم تعرف جوابها مسبقًا.

٤التتبّع بالطباعة

إذا لم تعرف أين الخطأ، فاطبع قيم المتغيّرات أثناء التشغيل لترى ما يحدث فعلًا:

main.py
total = 0for n in range(1, 4):    total += n    print("n =", n, "total =", total)print("المجموع:", total)
Shell×
>>> %Run main.py
n = 1 total = 1
n = 2 total = 3
n = 3 total = 6
المجموع: 6
>>>

بعد أن تجد الخطأ احذف سطور الطباعة الإضافية.

٥مصحّح Thonny

في Thonny أداة تشغّل البرنامج خطوة بخطوة:

  1. اضغط زر التصحيح 🐞 بدل زر التشغيل.
  2. اضغط «Step over» (أو F6) لتنفيذ سطر واحد في كل مرة.
  3. افتح قائمة View ← Variables لترى قيمة كل متغيّر وهي تتغيّر.

هذا يشبه أداة «التتبّع» التي استخدمتها في دروس هذا الموقع.

📎 للاستزادة (اختياري): الخطأ قد يكون في السطر السابق

إذا نسيت إغلاق قوس، قد يشير بايثون إلى السطر التالي. فإذا لم تجد خطأً في السطر المذكور، فانظر في السطر الذي قبله.

توقّع وتحقّق

برنامج يعمل بلا رسالة خطأ لكن نتيجته خطأ. ما نوع الخطأ؟

لا رسالة، والنتيجة خطأ.

رسالة تنتهي بـ ZeroDivisionError. ما السبب؟

قسمة على صفر.

ما فائدة طباعة المتغيّرات داخل الحلقة؟

نرى ما يحدث فعلًا.

أي خطأ يظهر قبل أن يبدأ البرنامج في التنفيذ؟

بايثون يرفض الكود قبل تشغيله.

الخلاصة

تحدٍّ برمجي: أصلح البرنامج

متوسط

في هذا البرنامج ثلاثة أخطاء. أصلحها حتى يطبع متوسط الدرجتين 85.0.

المطلوب:
  • خطأ في كتابة اسم دالة.
  • خطأ في الأقواس (منطقي).
  • خطأ في المسافة البادئة.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
a = 80b = 90if a > 0:print("نحسب المتوسط")avg = a + b / 2prnt("المتوسط:", avg)
المطلوب×
نحسب المتوسط
المتوسط: 85.0
💡 تلميح 1
السطر داخل if يحتاج مسافة بادئة.
💡 تلميح 2
المتوسط: (a + b) / 2
💡 تلميح 3
prnt تُكتب print.

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
a = 80b = 90if a > 0:    print("نحسب المتوسط")avg = (a + b) / 2print("المتوسط:", avg)
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←