تخطَّ إلى المحتوى

٨ يوليو ٢٠٢٦

حل خطأ SyntaxError: invalid syntax في بايثون بالعربي

شارك المقال:

أوّل خطأ يقابل أي متعلّم بايثون تقريبًا هو SyntaxError: invalid syntax. الخبر الجيد: هو أسهل الأخطاء حلًّا، لأن بايثون يخبرك بمكان المشكلة بالضبط — إذا عرفت كيف تقرأ الرسالة.

كيف تقرأ رسالة الخطأ

  File "app.py", line 3
    if age > 18
               ^
SyntaxError: expected ':'

ثلاث معلومات ذهبية في كل رسالة:

  • اسم الملف ورقم السطر (line 3) — أين توقّف بايثون.
  • السهم ^ — النقطة التي فشل عندها فهم الجملة.
  • الوصف — في بايثون الحديث يكون محددًا ومفيدًا مثل expected ':'.

💡 مهم: SyntaxError يُكتشف قبل تشغيل أي سطر من برنامجك — لذلك لن تنفع طباعة print للتشخيص؛ المشكلة في الكتابة نفسها.

الأسباب السبعة الأكثر شيوعًا

السببمثال خاطئالصحيح
نسيان النقطتين :if age > 18if age > 18:
قوس لم يُغلقprint(sum([1, 2)print(sum([1, 2]))
اقتباس لم يُغلقname = "أحمدname = "أحمد"
= بدل == في الشرطif x = 5:if x == 5:
خطأ إزاحةمسافات غير متسقة4 مسافات دائمًا
كلمة محجوزة كاسمclass = "A"grade = "A"
صيغة بايثون 2print "hi"print("hi")

الحلول خطوة بخطوة

1) نقطتان منسيّتان — السبب الأول بلا منازع

كل سطر يفتح كتلة جديدة في بايثون يجب أن ينتهي بنقطتين:

if score >= 60:      # ✅
for i in range(10):  # ✅
def greet(name):     # ✅
while True:          # ✅

2) قوس أو اقتباس لم يُغلق — انظر للسطر السابق

هذا هو السبب الذي يخدع الجميع: بايثون يشير إلى سطرٍ يبدو سليمًا، بينما القوس المفتوح في السطر الذي قبله:

total = sum([1, 2, 3    # ❌ القوسان لم يُغلقا هنا
print(total)            # ← لكن الخطأ سيُشار إليه هنا!

بايثون الحديث (3.10+) صار يخبرك صراحة: SyntaxError: '[' was never closed — مع رقم السطر الأصلي.

3) IndentationError — قصة المسافات

IndentationError: expected an indented block after 'if' statement

قواعد الإزاحة الذهبية:

  • بعد أي سطر ينتهي بـ : يجب أن يكون السطر التالي مُزاحًا للداخل.
  • استخدم 4 مسافات دائمًا — ولا تخلط Tab مع Space أبدًا.
  • في VS Code فعّل إعداد "Render Whitespace" لترى المسافات بعينك.
if logged_in:
    print("أهلًا!")   # ✅ 4 مسافات

4) = إسناد و == مقارنة

if x = 5:    # ❌ SyntaxError
if x == 5:   # ✅ مقارنة

قائمة تحقّق سريعة

  • هل السطر الذي يفتح كتلة ينتهي بـ :؟
  • هل كل ( و [ و { و " له إغلاق مطابق؟ (افحص السطر السابق أيضًا)
  • هل استخدمت == للمقارنة داخل الشروط؟
  • هل الإزاحة 4 مسافات متسقة في كل الملف؟
  • هل استخدمت كلمة محجوزة (class, def, if…) اسمًا لمتغيّر؟

الخلاصة

SyntaxError ليس عدوًّا — هو مصحح إملائي يوقفك قبل تشغيل كود مكسور. اقرأ رقم السطر، انظر للسهم ^، وافحص السطر المُشار إليه والسطر الذي قبله، وستحلّه في أقل من دقيقة.

بعد إتقان قراءة الأخطاء، تعمّق في مسار بايثون الكامل، أو راجع أخطاء بايثون الشائعة الأخرى و جدول أنواع الأخطاء في جافاسكريبت للمقارنة.

📚 مصادر رسمية للتعمّق: التوثيق الرسمي لـ Python

الأسئلة الشائعة

ما معنى SyntaxError: invalid syntax؟

يعني أن بايثون توقّف قبل تشغيل البرنامج لأنه وجد جملة مكتوبة بطريقة لا يفهمها — مثل نسيان النقطتين بعد if أو قوس غير مغلق. هو خطأ في الكتابة وليس في منطق البرنامج.

لماذا يشير الخطأ إلى سطر صحيح لا مشكلة فيه؟

لأن الخطأ الحقيقي غالبًا في السطر السابق — قوس أو اقتباس لم يُغلق هناك يجعل بايثون يكتشف المشكلة متأخرًا في السطر التالي. اقرأ دائمًا السطر المُشار إليه والسطر الذي قبله.

ما الفرق بين SyntaxError و IndentationError؟

IndentationError نوع خاص من SyntaxError يتعلق بالمسافات البادئة فقط: مسافة ناقصة أو زائدة أو خلط Tab مع Space. العلاج توحيد الإزاحة إلى 4 مسافات في كل الملف.

اقرأ أيضًا

تصفّح كل المقالات في المدوّنة، أو ابدأ التعلّم من المسارات و خرائط الطريق.