finally يُنفَّذ سواء حدث استثناء أم لا
آخر تحديث: 2026-09-22
finally يُنفَّذ سواء حدث استثناء أم لا
كتلة finally تُنفَّذ سواء حدث استثناء أم لا؛ تُستخدم غالبًا لتحرير الموارد.
| التصنيف | الكلمات المفتاحية والعبارات |
|---|---|
| النوع | كلمة مفتاحية / عبارة |
| إصدار بايثون | all |
📝 الصياغة
try:
block
finally:
cleanup
▶ مثال
عدّل الكود واضغط تشغيل لرؤية النتيجة في لوحة المخرجات:
المخرجات:
try
cleanup
🏷️ كلمات مفتاحية / عبارات ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريباً — تابعونا.
❓ أسئلة شائعة
Qهل يُنفَّذ الكود في `finally` دائمًا؟
Aدائمًا تقريبًا. حتى إذا كان `try` يحتوي `return` أو يُثير استثناءً، يُنفَّذ `finally` قبل الخروج. الاستثناءات الوحيدة هي حالات متطرفة مثل قتل العملية قسرًا أو انقطاع الطاقة أو تعطل المفسّر.
Qماذا يحدث إذا كتبت `return` داخل `finally`؟
Aيتجاوز `return` في `finally` القيمة التي يُرجعها جسم `try` — مأزق كلاسيكي. لا تكتب `return` ولا تُثر استثناءً في `finally`؛ يجب أن يقوم بالتنظيف فقط.
Qكل من `finally` و`with` يمكنه تنظيف الموارد. كيف تختار بينهما؟
Aلإدارة موارد مثل الملفات والأقفال والاتصالات، فضّل `with` (أنظف وموصى به رسميًا). استخدم `finally` لأي منطق تنظيف يجب أن يعمل كبديل، مثل `finally: conn.close()`.