أخطاء واستثناءات Python: دليل متقدم وشامل
في عالم البرمجة، الأخطاء ليست أعداءً، بل هي أكثر محاوريك صدقًا. إنها لا تحاول إرباكك؛ بل تشير مباشرة إلى نقاط الضعف في الكود وتساعدك على جعل البرامج أكثر متانة واستقرارًا. تمتلك Python نظامًا قويًا ومرنًا لمعالجة الأخطاء، يعتمد على مفهوم "الاستثناءات". فهم كيفية عمل الاستثناءات، وأنواعها، وكيفية التعامل معها بشكل صحيح، ليس مجرد مهارة، بل هو نقلة نوعية في مستوى الإتقان لأي مطور Python، من المبتدئ إلى المحترف.
هذه المقالة هي دليلك الكامل لعالم الأخطاء والاستثناءات في Python. سننتقل من الأساسيات إلى التقنيات المتقدمة التي تمكنك من كتابة كود يتحمل الأخطاء بكل احترافية.
ما هو الخطأ في Python؟ وجهان للمشكلة
أولاً وقبل كل شيء، من المهم التمييز بين نوعين رئيسيين من الأخطاء. تخيل أنك تحاول التحدث بلغة أجنبية:
- الأخطاء النحوية (Syntax Errors): هذا يشبه بناء جملة بأخطاء نحوية فادحة. المحاور الخاص بك (مفسر Python) ببساطة لن يفهمك وسيقطع الحديث قبل أن تنهي فكرتك. الكود الذي يحتوي على مثل هذه الأخطاء لن يبدأ حتى في التنفيذ.
- الاستثناءات (Exceptions): لقد بنيت جملة صحيحة نحويًا، لكن معناها في السياق الحالي أدى إلى موقف غير منطقي. على سبيل المثال، طلبت "تمرير الملح" على طاولة لا يوجد بها ملح. فهم المحاور الجملة، لكنه لم يستطع تنفيذها. هكذا تعمل Python: الكود صحيح نحويًا، لكن أثناء التشغيل يحدث موقف غير متوقع (القسمة على صفر، الوصول إلى ملف غير موجود). إذا لم يتم توقع هذا الموقف ومعالجته، سينتهي البرنامج بشكل مفاجئ.
الأخطاء النحوية: حراس قواعد الكود
هذا هو أبسط أنواع الأخطاء لإصلاحه، لأن مفسر Python عادة ما يشير بدقة إلى مكان المشكلة، مثل معلم يضع خطًا تحت الخطأ في الإملاء.
SyntaxError
ما هو هذا الخطأ؟
الخطأ النحوي الأكثر شيوعًا. يعني أنك انتهكت قواعد اللغة: نسيت النقطتين الرأسيتين، لم تغلق قوسًا، استخدمت عامل تشغيل غير صحيح، وهكذا.
مثال على كود يسبب الخطأ
# مثال 1: نسيان النقطتين الرأسيتين بعد الشرط
ifx = 10if x > 5
print("x أكبر من 5")
Traceback:File "main.py", line 2if x > 5^SyntaxError: expected ':'
مثال 2: قوس غير مغلق
print("مرحبًا بالعالم
"Traceback:File "main.py", line 1print("مرحبًا بالعالم"^SyntaxError: '(' was never closed
كيف تصلحه؟
اقرأ رسالة الخطأ بعناية. عادةً ما يضع المفسر علامة إقحام (^) أسفل المكان الذي اكتشف فيه المشكلة. صحح الكود وفقًا لقواعد Python النحوية.
# الكود المصحح
x = 10if x > 5:
print("x أكبر من 5")
print("مرحبًا بالعالم")
IndentationError / TabError
ما هو هذا الخطأ؟
خطأ فريد في Python يتعلق بالمسافات البادئة. تستخدم Python المسافات البادئة لتحديد كتل الكود. يحدث IndentationError عند استخدام المسافة البادئة بشكل غير صحيح، بينما يحدث TabError عند خلط علامات التبويب (Tab) مع المسافات.
مثال على كود يسبب الخطأ
def my_function():
print("هذا هو جسم الدالة") # مسافة بادئة غير صحيحة
Traceback:File "main.py", line 2print("هذا هو جسم الدالة")^IndentationError: expected an indented block
كيف تصلحه؟
حافظ على تناسق المسافات البادئة. يوصي معيار PEP 8 باستخدام 4 مسافات لكل مستوى تداخل. قم بإعداد محرر الكود الخاص بك ليحل علامات التبويب تلقائيًا بـ 4 مسافات - فهذا سينقذك من العديد من المشاكل.
# الكود المصحح
def my_function():
print("هذا هو جسم الدالة") # مسافة بادئة صحيحة مقدارها 4 مسافات