الدرس 28 من 56 · الأمان الرقمي

درع برنامجك: try و except

البرنامج بدون حماية مثل زجاج: أي غلطة صغيرة تكسره كله. جرب بس: افتح ملف غير موجود، أو اقسم رقم على صفر — يطير برنامجك برسالة حمراء ويتوقف كل شي.

الحل: نلبس البرنامج خوذة. اسمها try / except، ومعناها بالعربي: "جرب هذا، وإذا صارت مشكلة سو هذا بداله بدل ما تنهار".

try:
    n = int(input("اكتب رقم: "))
    print("عشرة مقسومة عليه:", 10 / n)
except ValueError:
    print("هذا مو رقم! اكتب أرقام بس")
except ZeroDivisionError:
    print("ما نقدر نقسم على صفر!")

وش صار هنا؟ بايثون يجرب السطور اللي داخل try. إذا كل شي تمام، نمشي عادي وexcept ما ينفذ أبداً. وإذا صار خطأ، بايثون يشوف نوعه:

• كتب "خمسة"؟ ValueError — نرد عليه بلطف
• كتب 0؟ ZeroDivisionError — نشرح له إن القسمة على صفر مستحيلة
• والبرنامج يكمل حي — ما يطير ولا يوقف!

الأخطاء الشائعة اللي لازم تحفظها كأسماء:

ValueError       # قيمة غلط: int("أهلاً")
ZeroDivisionError  # قسمة على صفر
FileNotFoundError # ملف غير موجود
TypeError        # نوع غلط: "5" + 5

وأهم قاعدة أمان بالبرمجة: لا تكتب except وحدها وتسكتها. يعني:

try:
    risky_thing()
except:
    pass   # خطر! يخفي كل مشكلة تحت السجادة

هذا يمسك كل الأخطاء ويسكتها — البرنامج يكمل وهو مكسور من جوه! مثل ما تغطي صوت إنذار الحريق وتقول كل شي تمام. الصح: امسك نوع الخطأ بالاسم ورد برسالة مفيدة أو أصلح المشكلة فعلاً.

جرب بنفسك: سوّ برنامج يسأل عن رقم ويرسم نجوم بالعدد اللي كتبه — وإذا غلط المستخدم، ما يطير البرنامج، بس يرد بلطف.

اختبار سريع للدرس

جاوب على كل الأسئلة — لازم كلها صح. إذا غلطت بيطلع صندوق ذهبي يفهّمك وش الخطأ. مو عيب تغلط، كل مبرمج بالعالم غلط وأخذ منها درس.

1. وش الخطأ اللي يطلع من int(«أهلاً»)؟
2. وش يصير لو 10 / 0 بدون try؟
3. ليش except وحده مع pass فكرة سيئة؟
الدرس 27 الدرس 29 — ملفاتك كنزك: النسخ الاحتياطي
FeLiXFeLiX AI — مساعد المنصتين