Kodokon kodokon.com

قراءة رسالة الخطأ وفهمها

تعلّم فكّ رموز رسالة الخطأ بدل إغلاقها: النوع والملف والسطر وأثر الاستدعاء.

8 دقيقة · 3 أسئلة

افتح هذا الدرس في Kodokon

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

تحتوي كل رسائل الخطأ تقريبًا على المعلومات نفسها. نوع الخطأ، الذي يصنّفه ضمن عائلة كبيرة. والرسالة، التي تشرح في جملة واحدة ما الذي لا يسير على ما يرام. والملف المعنيّ ورقم السطر، وهما يدلّانك بالضبط على موضع البحث. وأحيانًا أثر الاستدعاء (stack trace): قائمة الخطوات التي مرّ بها البرنامج قبل أن يتعطّل.

PYTHON
Traceback (most recent call last):
  File "shopping.py", line 12, in <module>
    total = price * quantity
NameError: name 'quantity' is not defined
رسالة من Python: الملف، والسطر 12، والنوع NameError وشرحه.

في المثال أعلاه، كل شيء مذكور بوضوح. الملف هو shopping.py، والسطر هو 12، والنوع هو NameError، والرسالة تقول name 'quantity' is not defined. وبكلام بسيط: في السطر 12 تستخدم متغيّرًا اسمه quantity لم تُنشئه قط، أو أخطأت في كتابة اسمه. لا حاجة إلى تحقيق معقّد - فالرسالة كانت تحمل الجواب أصلًا.

يُقرأ أثر الاستدعاء في Python من الأسفل إلى الأعلى: السطر الأخير يعطي النوع والشرح، وفوقه مباشرة يوجد الملف والسطر المُخطئ. وحين يكون الأثر طويلًا جدًّا، ابحث عن أول سطر يذكر ملفك أنت. أما الأسطر التي تشير إلى ملفات مجهولة بأسماء غريبة فهي تخصّ المكتبات التي تستخدمها: في 99% من الحالات ليست هي المعطوبة، بل طريقتك في استدعائها.

JAVASCRIPT
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
    at showProfile (app.js:24:18)
    at start (app.js:41:3)
المنطق نفسه في وحدة تحكّم المتصفح: الملف app.js، السطر 24، العمود 18.

تتكرّر بضع صياغات باستمرار، ومن المفيد أن تتعرّف عليها. not defined تعني أن الاسم الذي استخدمته غير موجود في ذلك الموضع. وundefined تعني أن الشيء موجود لكنه لا يحمل أي قيمة. وunexpected تعني أن البرنامج كان يتوقّع شيئًا آخر، وغالبًا قوسًا أو علامة تنصيص منسيّة. وpermission denied تشير إلى مشكلة صلاحيات، لا إلى مشكلة في الكود. وno such file or directory تعني أن المسار الذي كتبته لا يؤدّي إلى أي مكان.

اختبار المعرفة

تأكّد من أنك تذكّرت النقاط الأساسية في هذا الدرس.

  1. أي جزء من رسالة الخطأ يدلّك على موضع البحث أولًا؟
    • اسم الملف ورقم السطر
    • لون النص المعروض على الشاشة
    • الطول الإجمالي للرسالة
    • اسم نظام التشغيل لديك
  2. بأي اتجاه يُقرأ أثر الاستدعاء في Python؟
    • من الأعلى إلى الأسفل: السطر الأول يعطي الحل
    • من الأسفل إلى الأعلى: السطر الأخير يعطي النوع والشرح
    • بأي اتجاه كان، فهو زخرفي بحت
  3. ماذا يعني عادةً خطأ يحتوي على not defined؟
    • الاسم الذي استخدمته غير موجود في ذلك الموضع من البرنامج
    • الملف أكبر من أن يُفتح
    • انقطع الاتصال بالإنترنت