يبدو أننا سنعتمد “معالجة الأخطاء” (Exception Handling) ليكون هي الدرس الرابع عشر. هذا التغيير موفق جداً، لأن الطالب بعد أن تعلم “الدوال” وتمرير البيانات، سيبدأ في كتابة أكواد معقدة، وهنا تزداد احتمالية وقوع الأخطاء.
إليك الدرس الرابع عشر بأدق وأفضل شرح يليق بـ “أكاديمية قياوي”:
-
مقدمة: المبرمج ليس ساحراً، لكنه مستعد! حتى أكبر الشركات (مثل Google وFacebook) تقع في أكوادها أخطاء. الفرق بين المبرمج المبتدئ والمحترف هو أن المحترف يتوقع الخطأ قبل حدوثه. تخيل أن برنامجك يطلب من الطالب إدخال “عمره”، فقام الطالب بكتابة “عشرون” (نص) بدلاً من “20” (رقم). البرنامج العادي سينهار فوراً، لكن برنامجنا في أكاديمية قياوي سيقول له بلباقة: “عذراً، يرجى إدخال رقم صحيح”.
-
كيف تعمل منظومة الحماية؟ نستخدم في بايثون أربع كلمات سحرية:
1 try (حاول): نضع تحتها الكود الذي نخشى أن يسبب مشكلة.
2 except (إلا إذا): هنا نكتب ماذا يفعل البرنامج إذا حدث الخطأ فعلاً.
3 else (إضافة): (اختياري) يعمل فقط إذا لم يحدث أي خطأ.
4 finally (في الختام): (اختياري) يعمل دائماً، حدث خطأ أم لا.
- مثال عملي: حماية “آلة القسمة” القسمة على صفر هي أشهر خطأ في الرياضيات والبرمجة. لنحمي كودنا:
:try
x =((“أدخل الرقم الأول: “)input)in
y =((“أدخل الرقم الثاني: “)input)in
result = x / y
(“{result}:النتيجة هي”f)print:except ZeroDivisionError
(“!خطأ: لا يمكن القسمة على صفر”)print:except ValueError
(“!خطأ: يرجى إدخال أرقام صحيحة فقط”)print: except Exception as e
(“{e}:حدث خطأ غير متوقع”f)print
- لماذا هذا الدرس متميز؟ استمرارية البرنامج: بدلاً من أن يغلق البرنامج في وجه المستخدم، يظل يعمل بذكاء.
تجربة مستخدم أفضل: تظهر رسائل تنبيهية واضحة بدلاً من رموز الخطأ الحمراء المخيفة.
الاحترافية: هذا الكود هو ما يميز التطبيقات التجارية القوية.
- جدول أنواع الأخطاء الشائعة:
-
نوع الخطأ متى يحدث؟ ZeroDivisionErrorعند محاولة القسمة على رقم 0. ValueErrorعند إدخال نوع بيانات خاطئ (مثل نص بدل رقم). IndexErrorعند محاولة الوصول لعنصر غير موجود في قائمة. KeyErrorعند البحث عن مفتاح غير موجود في قاموس. -
نصيحة الصديق المخلص لطلابنا:
“لا تخف من ظهور الخطأ (Error) في شاشتك، فهو ليس فشلاً بل هو رسالة من بايثون ليرشدك. باستخدام
tryوexceptأنت الآن تمنح برنامجك ‘درعاً واقياً’ يجعله يصمد أمام أخطاء المستخدمين.”