1. مبتدئ

    كيف تختار الاستثناء المناسب وتتعامل مع تسلسله الهرمي؟

    ارمِ استثناءً يعبر عن سبب الفشل بدقة (مثل ValueError أو KeyError أو استثناء domain خاص)، والتقط أضيق نوع تستطيع معالجته فعلًا بدل except Exception في كل مكان.

    اقرأ الشرح الكامل
  2. مبتدئ

    ما الفرق بين except و else و finally في جملة try؟

    يعالج except الاستثناء المطابق، ويُنفذ else فقط عند نجاح try بلا استثناء، ويُنفذ finally دائمًا سواء نجحت العملية أو فشلت.

    اقرأ الشرح الكامل
  3. مبتدئ

    متى تنشئ استثناءً مخصصًا (custom exception)؟

    عندما يحتاج المستدعي إلى تمييز نوع فشل معين في الـ domain واتخاذ قرار مختلف بناءً عليه، أو عندما تحتاج إرفاق بيانات منظمة مع الخطأ.

    اقرأ الشرح الكامل
  4. متوسط

    ما الفرق بين أسلوبي EAFP و LBYL؟

    ‏EAFP (أسهل أن تطلب السماح بعد الفعل) يحاول العملية مباشرة ويعالج الاستثناء، بينما LBYL (انظر قبل أن تقفز) يفحص الشروط قبل التنفيذ.

    اقرأ الشرح الكامل
  5. متوسط

    ما فائدة raise ... from؟

    تربط الاستثناء الجديد بالسبب الأصلي عبر __cause__، فيظهر الـ traceback كاملًا بعبارة "The above exception was the direct cause..."، مما يحافظ على سياق التشخيص.

    اقرأ الشرح الكامل
  6. متوسط

    كيف تساعد contextlib في إدارة الموارد؟

    توفر أدوات لبناء ودمج مديري السياق: contextmanager لكتابة مدير بـ generator، و ExitStack لإدارة عدد متغير من الموارد، و suppress لتجاهل استثناء محدد، و closing و nullcontext.

    اقرأ الشرح الكامل
  7. متوسط

    كيف تسجّل استثناءً دون أن تفقد الـ traceback؟

    استخدم logger.exception() داخل كتلة except (تسجل بمستوى ERROR مع الـ traceback)، أو مرر exc_info=True لأي مستوى آخر، بدل تسجيل str(err) فقط.

    اقرأ الشرح الكامل
  8. متقدم

    كيف تصمم timeouts و retries دون أن تضاعف الضرر؟

    حدد timeout لكل عملية I/O، وأعد المحاولة فقط للأخطاء المؤقتة، مع exponential backoff و jitter وحد أقصى للمحاولات، وفقط للعمليات الآمنة للتكرار (idempotent).

    اقرأ الشرح الكامل
  9. متقدم

    متى تحتاج ExceptionGroup و except*؟

    عندما تفشل عدة عمليات متزامنة في نفس الوقت (مثل مهام TaskGroup) وتحتاج عرض كل الأخطاء ومعالجة كل نوع منها، بدل الاكتفاء بأول خطأ.

    اقرأ الشرح الكامل
  10. متوسط

    أين يجب وضع التحقق من البيانات القادمة من خارج النظام؟

    عند حدود الثقة: طلبات HTTP، ووسائط CLI، والملفات، ومتغيرات البيئة، ورسائل الطوابير. حوّل البيانات هناك إلى نموذج موثوق (parse, don't validate) ثم مرره للداخل.

    اقرأ الشرح الكامل