1.6 رسائل الخطأ
أهداف التعلم
في نهاية هذا القسم، ينبغي أن تكون قادرًا على:
- تحديد نوع الخطأ ورقم السطر في رسائل الخطأ.
- تصحيح أخطاء الصياغة (syntax errors)، وأخطاء الأسماء (name errors)، وأخطاء المسافة البادئة (indentation errors).
كيفية قراءة الأخطاء
ارتكاب الأخطاء جزء طبيعي من البرمجة. حتى المبرمجون ذوو الخبرة يرتكبون أخطاء عند كتابة الشِفرة. وقد تنشأ الأخطاء عن هذه الهفوات أثناء كتابة الشِفرة. يتطلب الحاسوب تعليمات محددة للغاية تخبره بما يجب فعله. إذا لم تكن التعليمات واضحة، فإن الحاسوب لا يعرف ما يجب فعله ويُظهر رسالة خطأ.
عند حدوث خطأ، تعرض بايثون رسالة تحتوي على المعلومات التالية:
- رقم سطر الخطأ.
- نوع الخطأ (مثال:
SyntaxError). - تفاصيل إضافية حول الخطأ.
مثال: كتابة print "Hello!" بدون أقواس هو خطأ صياغة (syntax error). في بايثون، الأقواس مطلوبة لاستخدام print. عند محاولة تشغيل print "Hello!"، تعرض بايثون الخطأ التالي:
Traceback (most recent call last):
File "/home/student/Desktop/example.py", line 1
print "Hello"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello")?
يشير رمز الإقحام (^) إلى المكان الذي عثرت فيه بايثون على الخطأ. قد يكون الخطأ أحيانًا موجودًا قبل سطر أو سطرين من المكان الذي يظهر فيه رمز الإقحام، لأن بايثون قد لا تكون قد اكتشفت الخطأ إلا في تلك النقطة. تتبع الخطأ (Traceback) هو تقرير بايثون عن موقع ونوع الخطأ. توحي كلمة "تتبع الخطأ" بأن على المبرمج الرجوع في الشِفرة للعثور على الخطأ إذا لم يكن واضحًا على الفور.
تعلّم قراءة رسائل الخطأ بعناية مهارة مهمة. قد تكون كمية المصطلحات التقنية مربكة في البداية، لكن هذه المعلومات يمكن أن تكون مفيدة جدًا.
مفاهيم تطبيقية
أجزاء الخطأ
بالنظر إلى رسالة الخطأ التالية:
Traceback (most recent call last):
File "/home/student/Desktop/example.py", line 2
print "test"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("test")?
أنواع الأخطاء الشائعة
قد تحدث أنواع مختلفة من الأخطاء عند تشغيل برامج بايثون. عند حدوث خطأ، فإن معرفة نوع الخطأ توفّر فهمًا لكيفية تصحيحه. يعرض الجدول التالي أمثلة على الأخطاء التي يمكن لأي شخص ارتكابها عند البرمجة.
| الخطأ | رسالة الخطأ | الشرح |
|---|---|---|
|
SyntaxError: unexpected EOF while parsing |
القوس الختامي مفقود. تفاجأت بايثون بالوصول إلى نهاية الملف (EOF) قبل اكتمال هذا السطر. |
|
SyntaxError: EOL while scanning string literal |
علامات الاقتباس الختامية مفقودة. ونتيجة لذلك، لا تنتهي السلسلة النصية قبل نهاية السطر (EOL). |
|
NameError: name 'wird' is not defined |
تهجئة |
|
NameError: name 'prints' is not defined |
تهجئة |
print("Hello")
|
IndentationError: unexpected indent |
لقد كتب المبرمج مسافة عن طريق الخطأ في بداية السطر. |
print("Goodbye")
|
IndentationError: unexpected indent |
لقد ضغط المبرمج مفتاح Tab عن طريق الخطأ في بداية السطر. |
مفاهيم تطبيقية
أنواع الأخطاء
لكل برنامج أدناه، ما نوع الخطأ الذي سيحدث؟
جرّب بنفسك
ثلاثة أخطاء
يحتوي البرنامج التالي على ثلاثة أخطاء.
- شغّل البرنامج للعثور على الخطأ الأول، وصحّح سطر الشِفرة المقابل.
- ثم شغّل البرنامج مرة أخرى للعثور على الخطأ الثاني وتصحيحه.
- استمر في تشغيل البرنامج وتصحيحه حتى لا تبقى أخطاء.
جرّب بنفسك
رموز خاطئة
تستند هذه الشِفرة إلى مثال سابق، لكنها تحتوي على عدة أخطاء.
- أحد الأسطر يفتقر إلى علامات الترقيم المطلوبة، وسطر آخر يستخدم رموزًا غير صحيحة.
- شغّل البرنامج للعثور على الخطأ الأول، وصحّح سطر الشِفرة المقابل.
- استمر في تشغيل البرنامج وتصحيحه حتى لا تبقى أخطاء.