شرح المفهوم
تصحيح الأخطاء هو اللحظة التي يتوقف فيها البرمجة عن كونها نظرية وتبدأ في أن تصبح حقيقة ملموسة. تكتب شيئًا يبدو صحيحًا، تشغله بثقة، ثم يظهر لك بايثون فورًا أن هناك تفصيلاً واحدًا خاطئًا. هذا ليس فشلاً. هذا هو التطوير الطبيعي. في هذا الدرس، ستتدرب على قراءة الخطأ بدلاً من التفاعل العاطفي معه. يحتوي السكريبت أدناه على خطأ صغير ولكنه واقعي: البيانات موجودة، ولكن تم تمرير اسم متغير خاطئ إلى الدالة. بعد إصلاح ذلك، ستتسبب عمدًا في مشكلة ثانية لترى كيف يبدو نوع مختلف من الأخطاء. الهدف ليس فقط جعل البرنامج يعمل. الهدف هو بناء عادة هادئة: تشغيل الملف، قراءة تتبع الأخطاء (traceback)، إصلاح شيء واحد، ثم الاختبار مرة أخرى. بحلول نهاية هذا الدرس، يجب أن تكون قادرًا على: • استخدام تتبع الأخطاء (traceback) للعثور على السطر الحقيقي الذي فشل، • شرح سبب حدوث `NameError` بلغة واضحة، • إصلاح خطأ واحد في كل مرة بدلاً من تغيير أجزاء عشوائية من السكريبت.
أين تضع الكود
- عرّف متغيرات اللون والموضع في الأعلى.
- أنشئ منطق رسم الأشكال أو وضعها في المنتصف.
- اعرض المخرجات (طباعة، لوحة رسم، SVG، أو كتلة منسقة) في النهاية.
مرجع الأوامر
- اقرأ السطر الأخير من تتبع الأخطاء (traceback) أولاً؛ فهو يخبرك عادةً بنوع الخطأ الحقيقي والسطر الدقيق.
- إذا رأيت `NameError`، فابحث عن متغير تم تهجئته بشكل خاطئ، أو لم يتم إنشاؤه أبدًا، أو تم إعادة تسميته في مكان واحد فقط.
- أصلح مشكلة واحدة، شغّل الملف مرة أخرى، وعندها فقط انتقل إلى المشكلة التالية.
- لا تخمّن بشكل أعمى؛ دع رسالة الخطأ ترشدك إلى تعديلك التالي.
دليل خطوة بخطوة
- شغّل السكريبت مرة واحدة دون تغيير أي شيء واقرأ تتبع الأخطاء (traceback) ببطء من الأسفل إلى الأعلى.
- ابحث عن السطر الذي تسبب في `NameError` واستبدل `username` بـ `learner_name`.
- شغّل الملف مرة أخرى وتأكد من أن التحية تُطبع الآن بشكل صحيح.
- بعد أن يعمل ذلك، اضبط `learner_name = None` عمدًا وشغّل الملف مرة أخرى لترى خطأ مختلفًا.
- أعد السلسلة النصية الصالحة واكتب ملاحظة قصيرة حول ما تغير بين الخطأين.
تمارين تطبيقية
- أنشئ `NameError` ثانيًا عمدًا عن طريق تغيير اسم متغير واحد في مكان واحد فقط، ثم أصلحه.
- اشرح بكلماتك الخاصة لماذا فشلت `build_greeting(username)` قبل أن تتمكن الدالة من العمل بشكل صحيح.
- أضف حماية بسيطة تمنع الدالة من قبول سلسلة نصية فارغة بعد الانتهاء من خطوات تصحيح الأخطاء.
تحديات برمجية
- خزّن التحية في متغير أولاً، ثم اطبعها فقط بعد التأكد من نجاح الدالة.
- اكتب قائمة تحقق صغيرة يمكنك اتباعها في جلسات تصحيح الأخطاء المستقبلية: نوع الخطأ، الملف، السطر، المتغير، إعادة التشغيل.
مهام تمرين صغيرة
- انسخ رسالة `NameError` الدقيقة إلى ملاحظاتك.
- قل بصوت عالٍ أي المتغيرات موجود وأيها غير موجود قبل إصلاح الكود.
- احتفظ بجملة واحدة لنفسك: `تتبع الأخطاء (traceback) هو معلومات، وليس كارثة.`
خطأ شائع
Mixing x and y axes or using wrong coordinate origin causes shapes to appear in unexpected places.
تحدٍ مصغّر من الواقع
Draw one square, one triangle, and one circle, then move X marker 2 steps right and 1 step down.