رسائل الأخطاء الشائعة
تتضمّن هذه الصفحة معلومات عن أشهر رسائل الأخطاء التي قد تصادفها عند إنجاز تمارين البرمجة في هذه الدورة.
ناتج الطباعة الخاص بي يبدو مطابقًا تمامًا للمثال في التعليمات، لكنّ تقديمي ما زال يفشل
تأكّد من أن برنامجك لا يطبع أي مسافات بيضاء زائدة، مثل محارف المسافة. ولاحظ أن السلوك الافتراضي للدالة print هو إضافة مسافة بين أي سلسلتين نصيتين يفصل بينهما فاصلة.
print("Hello","World!") # This prints out: Hello World!
SyntaxError: إدخال خاطئ في السطر [رقم السطر]
تظهر رسالة الخطأ هذه عادةً عندما تحتوي شيفرتك على خطأ مطبعي يصعب على مُفسِّر Python تصنيفه بدقة أكبر. فمثلًا، قد ينقص محرف النقطتين في نهاية جملة if، أو قد تكون كلمة مفتاحية مثل while قد كُتبت خطأً. الطريقة الوحيدة لإصلاح هذه المشكلة هي فحص السطر المشار إليه في رسالة الخطأ.
number1 = 1
number1 = 2
if number1 < number2 # ':' missing
print('number2 is greater')
إذا بدا السطر المشار إليه في رسالة الخطأ صحيحًا، فغالبًا يكون الخطأ في السطر الذي يعلوه أو يليه بسطر واحد، لذا افحص المنطقة المحيطة بالمشكلة أيضًا.
ملاحظة: تمارين البرمجة في الأجزاء الأولى من هذه الدورة تستخدم إطارًا اسمه Skulpt لتشغيل شيفرة Python في المتصفّح. وSkulpt محدود جدًا مقارنةً بمُفسِّر Python الاعتيادي، لذا فإن رسائل الأخطاء المطبوعة غالبًا ما تكون أقلّ إفادة. فمثلًا، قد تشير رسالة الخطأ bad input on line إلى أخطاء برمجية مختلفة كثيرة، ويصعب معرفة السبب الحقيقي للخطأ بالاعتماد على هذه الرسالة وحدها.
SyntaxError: المسافة البادئة في السطر [رقم السطر] لا تطابق أي مستوى بادئة خارجي
شيفرتك مسنودة بمسافة بادئة غير صحيحة في السطر المشار إليه في رسالة الخطأ. فمثلًا، يجب أن تكون جميع الأسطر داخل كتلة if مسنودة بالمسافة نفسها. ولإصلاح هذا الخطأ، اسند جميع الأسطر داخل كتلة الشيفرة بعدد المسافات البيضاء نفسه تمامًا.
وفي ما يلي شيفرة من شأنها أن تسبّب هذا الخطأ:
if True:
print('Indented correctly')
print('Indented incorrectly!')
NameError: الاسم [اسم المتغيّر] غير معرَّف في السطر [رقم السطر]
أنت تحاول الإشارة إلى متغيّر أو كائن غير موجود في تلك النقطة تحديدًا من برنامجك. قد يكون المتغيّر لم يُسنَد إليه قيمة بعد، أو قد يكون في اسم المتغيّر خطأ مطبعي. وقد يكون الأمر أيضًا أنك عرّفت متغيّرًا داخل دالة وتحاول الإشارة إلى المتغيّر نفسه خارج تلك الدالة.
person = input('Please type in your name: ')
input('Please type in your age: ')
print("Hi", pearson) # error: person was typed pearson
print("You are", age, "years old") # error: the variable age has not been defined
TypeError: نوع (أو أنواع) المعامل غير مدعوم في عملية الجمع: 'int' و 'str' في السطر [رقم السطر]
قد تكون تحاول جمع عدد صحيح وسلسلة نصية معًا، من دون تحويل السلسلة النصية أولًا إلى قيمة عدد صحيح. ويمكن تحويل السلاسل النصية إلى أعداد صحيحة باستخدام الدالة int(). وقد تظهر رسالة خطأ مشابهة إذا حاولت تنفيذ عمليات حسابية أخرى، مثل القسمة أو الطرح، على السلاسل النصية.
قد يكون الأمر أيضًا أنك تحاول إنشاء سلسلة نصية جديدة بدمج سلسلة نصية مع عدد صحيح. ينبغي أن تحوّل أولًا العدد الصحيح إلى سلسلة نصية باستخدام الدالة str().
my_age = input("Please type in your age: ")
my_name = input("Please type in your name: ")
print(my_age//2) # error: the variable my_age has not been converted into an integer
TypeError: لا يمكن دمج كائنَي 'str' و 'int' في السطر [رقم السطر]
انظر أعلاه.
تعطّل Pylance
عادةً ما يحدث هذا عندما تكون إضافة TMC قد فتحت عددًا كبيرًا جدًا من التمارين في الوقت نفسه. يمكنك محاولة إغلاق التمارين غير المستخدمة من قائمة TMC الموجودة في الشريط الجانبي لـ VS code. افتح قائمة TMC، ثم اختر "دوراتي" (my courses)، وافتح الدورات التي لديك، ثم انقر على "إغلاق الكل" (close all) في الأجزاء التي لم تعد تعمل عليها. يمكنك دائمًا إعادة فتح التمارين إذا قرّرت العودة إلى ذلك الجزء.