أنواع الأخطاء ورسائلها
نتعرّف على أنواع الأخطاء وأشهر رسائلها. ⏱ نحو 15 دقيقة.
- تميّز أخطاء الصياغة ووقت التشغيل والأخطاء المنطقية.
- تفهم أشهر رسائل الخطأ وحلولها.
- تكتشف الخطأ المنطقي بتجربة قيم معروفة.
١ثلاثة أنواع من الأخطاء
كل المبرمجين يخطئون، والمهم أن نعرف كيف نجد الخطأ. الأخطاء ثلاثة أنواع:
| النوع | متى يظهر | مثال |
|---|---|---|
| خطأ صياغة | قبل التشغيل: بايثون لا يفهم الكود | نسيان القوس أو النقطتين |
| خطأ وقت التشغيل | أثناء التشغيل: الكود صحيح الشكل لكن لا يمكن تنفيذه | القسمة على صفر |
| خطأ منطقي | لا رسالة أبدًا، لكن النتيجة خطأ | نسيان الأقواس عند حساب المتوسط |
٢أشهر رسائل الخطأ
| الرسالة | معناها | الحل غالبًا |
|---|---|---|
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. لذلك جرّب برنامجك دائمًا بقيم تعرف جوابها مسبقًا.
📎 للاستزادة (اختياري): الخطأ قد يكون في السطر السابق
إذا نسيت إغلاق قوس، قد يشير بايثون إلى السطر التالي. فإذا لم تجد خطأً في السطر المذكور، فانظر في السطر الذي قبله.
توقّع وتحقّق
برنامج يعمل بلا رسالة خطأ لكن نتيجته خطأ. ما نوع الخطأ؟
رسالة تنتهي بـ ZeroDivisionError. ما السبب؟
كتبت age + 5 قبل أن تعرّف age. ما الرسالة؟
أي خطأ يظهر قبل أن يبدأ البرنامج في التنفيذ؟
الخلاصة
- خطأ الصياغة يمنع التشغيل، وخطأ وقت التشغيل يوقفه، والخطأ المنطقي يعطي نتيجة خطأ بلا رسالة.
- اسم الخطأ في آخر سطر من الرسالة يدلّك على نوعه.
- جرّب برنامجك بقيم تعرف جوابها لتكتشف الخطأ المنطقي.
تحدٍّ برمجي: أصلح البرنامج
متوسطفي هذا البرنامج ثلاثة أخطاء. أصلحها حتى يطبع متوسط الدرجتين 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)