تتبّع الأخطاء والوقاية منها
نتعلم كيف نجد الخطأ بسرعة، وكيف نتجنبه من البداية. ⏱ نحو 15 دقيقة.
- تقرأ رسالة الخطأ وتحدد نوعه ومكانه.
- تتتبّع البرنامج بطباعة القيم.
- تستخدم المصحّح ونقطة التوقف في
Thonny. - تتبع عادات تقلل الأخطاء.
١اقرأ رسالة الخطأ من الأسفل
رسالة الخطأ ليست عدوًّا، بل دليل. اقرأها من آخرها: السطر الأخير يقول ما الخطأ، والسطر الذي فيه line يقول أين هو:
price = 20count = "3"print(price * count + 1)
آخر سطر: TypeError، أي نوعان لا يجتمعان (نص مع عدد). ورقم السطر يدلّك على مكانه. الحل: int(count).
٢التتبّع بالطباعة
إذا كانت النتيجة خطأ ولا توجد رسالة، فاطبع القيم أثناء التشغيل لترى أين يبدأ الخطأ:
total = 0for n in range(1, 4): total = n print("n =", n, "total =", total)print("المجموع:", total)
الطباعة كشفت المشكلة: total لا يتجمّع، لأننا كتبنا total = n بدل total += n. بعد الإصلاح احذف سطر الطباعة الإضافي.
٣المصحّح ونقطة التوقف
في Thonny أداة تشغّل البرنامج خطوة بخطوة، مثل أداة «التتبّع» في هذا الموقع:
- اضغط على رقم السطر الذي تريد التوقف عنده، فتظهر نقطة توقف 🔴.
- اضغط زر التصحيح 🐞 بدل زر التشغيل، فيتوقف البرنامج عند تلك النقطة.
- اضغط «Step over»
(أو F6)لتنفيذ سطر واحد في كل مرة. - افتح View ← Variables لترى قيمة كل متغيّر وهي تتغيّر.
٤الوقاية خير من العلاج
| العادة | لماذا؟ |
|---|---|
| شغّل البرنامج بعد كل جزء صغير | إذا ظهر خطأ تعرف أنه في الجزء الجديد |
أسماء واضحة: price لا x | تفهم الكود وتكتشف الخطأ أسرع |
| جرّب بقيم تعرف جوابها | تكتشف الخطأ المنطقي |
| أصلح خطأً واحدًا ثم شغّل | لا تضيف أخطاء جديدة وأنت تصلح |
توقّع وتحقّق
أين تجد نوع الخطأ في رسالة بايثون؟
ما فائدة نقطة التوقف 🔴؟
البرنامج يعطي نتيجة خطأ بلا رسالة. ما أول خطوة؟
أي عادة تقلل الأخطاء؟
الخلاصة
- اقرأ رسالة الخطأ من آخرها: النوع في السطر الأخير، والمكان في رقم السطر.
- اطبع القيم أثناء التشغيل لترى أين يبدأ الخطأ.
- نقطة التوقف 🔴 والمصحّح 🐞 يشغّلان البرنامج خطوة بخطوة.
- شغّل بعد كل جزء صغير، واختر أسماء واضحة.
تحدٍّ برمجي: اعثر على الخطأ
متوسطهذا البرنامج يجب أن يطبع مجموع الدرجات 240، لكنه يطبع 90. استخدم الطباعة لتعرف السبب، ثم أصلحه.
- أضف print داخل الحلقة لترى القيم.
- أصلح الخطأ.
- احذف سطر الطباعة الإضافي في النهاية.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
marks = [70, 80, 90]total = 0for m in marks: total = mprint("المجموع:", total)
💡 تلميح 1
💡 تلميح 2
total += m بدل total = mحاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
marks = [70, 80, 90]total = 0for m in marks: total += mprint("المجموع:", total)