الأخطاء وتتبّعها
نتعرّف على أنواع الأخطاء، ونتعلم كيف نجدها ونصلحها. ⏱ نحو 20 دقيقة.
- تميّز أخطاء الصياغة ووقت التشغيل والأخطاء المنطقية.
- تفهم أشهر رسائل الخطأ وحلولها.
- تكتشف الخطأ المنطقي بتجربة قيم معروفة.
- تتتبع البرنامج بالطباعة وبمصحّح
Thonny.
١ثلاثة أنواع من الأخطاء
كل المبرمجين يخطئون، والمهم أن نعرف كيف نجد الخطأ. الأخطاء ثلاثة أنواع:
| النوع | متى يظهر | مثال |
|---|---|---|
| خطأ صياغة | قبل التشغيل: بايثون لا يفهم الكود | نسيان القوس أو النقطتين |
| خطأ وقت التشغيل | أثناء التشغيل: الكود صحيح الشكل لكن لا يمكن تنفيذه | القسمة على صفر |
| خطأ منطقي | لا رسالة أبدًا، لكن النتيجة خطأ | نسيان الأقواس عند حساب المتوسط |
٢أشهر رسائل الخطأ
| الرسالة | معناها | الحل غالبًا |
|---|---|---|
SyntaxError | الكتابة غير صحيحة | راجع الأقواس وعلامات التنصيص والنقطتين |
IndentationError | المسافة البادئة خطأ | اضبط المسافات داخل if والحلقات |
NameError | اسم غير معروف | صحّح كتابة الاسم، أو عرّف المتغيّر قبل استخدامه |
TypeError | نوعان لا يجتمعان | حوّل النوع بـ int أو str |
ValueError | قيمة لا تصلح للتحويل | تأكد من المدخلات |
ZeroDivisionError | قسمة على صفر | افحص المقسوم عليه قبل القسمة |
total = 100count = 0print(total / count)
٣الخطأ المنطقي: الأخطر
هنا لا تظهر رسالة، لكن الجواب خطأ. المطلوب متوسط 80 و 90، وهو 85:
a = 80b = 90print(a + b / 2)
الناتج 125! لأن القسمة نُفّذت قبل الجمع. والتصحيح (a + b) / 2. لذلك جرّب برنامجك دائمًا بقيم تعرف جوابها مسبقًا.
٤التتبّع بالطباعة
إذا لم تعرف أين الخطأ، فاطبع قيم المتغيّرات أثناء التشغيل لترى ما يحدث فعلًا:
total = 0for n in range(1, 4): total += n print("n =", n, "total =", total)print("المجموع:", total)
بعد أن تجد الخطأ احذف سطور الطباعة الإضافية.
٥مصحّح Thonny
في Thonny أداة تشغّل البرنامج خطوة بخطوة:
- اضغط زر التصحيح 🐞 بدل زر التشغيل.
- اضغط «Step over»
(أو F6)لتنفيذ سطر واحد في كل مرة. - افتح قائمة View ← Variables لترى قيمة كل متغيّر وهي تتغيّر.
هذا يشبه أداة «التتبّع» التي استخدمتها في دروس هذا الموقع.
📎 للاستزادة (اختياري): الخطأ قد يكون في السطر السابق
إذا نسيت إغلاق قوس، قد يشير بايثون إلى السطر التالي. فإذا لم تجد خطأً في السطر المذكور، فانظر في السطر الذي قبله.
توقّع وتحقّق
برنامج يعمل بلا رسالة خطأ لكن نتيجته خطأ. ما نوع الخطأ؟
رسالة تنتهي بـ ZeroDivisionError. ما السبب؟
ما فائدة طباعة المتغيّرات داخل الحلقة؟
أي خطأ يظهر قبل أن يبدأ البرنامج في التنفيذ؟
الخلاصة
- خطأ الصياغة يمنع التشغيل، وخطأ وقت التشغيل يوقفه، والخطأ المنطقي يعطي نتيجة خطأ بلا رسالة.
- اقرأ آخر سطر في الرسالة لتعرف نوع الخطأ، ورقم السطر لتعرف مكانه.
- جرّب برنامجك بقيم تعرف جوابها.
- اطبع المتغيّرات أو استخدم مصحّح
Thonnyلترى ما يحدث خطوة بخطوة.
تحدٍّ برمجي: أصلح البرنامج
متوسطفي هذا البرنامج ثلاثة أخطاء. أصلحها حتى يطبع متوسط الدرجتين 85.0.
- خطأ في كتابة اسم دالة.
- خطأ في الأقواس
(منطقي). - خطأ في المسافة البادئة.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
a = 80b = 90if a > 0:print("نحسب المتوسط")avg = a + b / 2prnt("المتوسط:", avg)
💡 تلميح 1
💡 تلميح 2
(a + b) / 2💡 تلميح 3
حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
a = 80b = 90if a > 0: print("نحسب المتوسط")avg = (a + b) / 2print("المتوسط:", avg)