مشكلة وحل 10: حل خطأ SyntaxError invalid syntax في بايثون للمبتدئين

تظهر رسالة SyntaxError: invalid syntax كثيرًا للمبتدئين أثناء تعلم بايثون، وغالبًا يشعر الطالب أن الخطأ غامض لأن الرسالة لا تشرح السبب بالتفصيل. لكن هذا الخطأ في الحقيقة يعني أن Python لم تستطع فهم طريقة كتابة الكود، لأن هناك مشكلة في تركيب السطر أو في السطر الذي قبله.

SyntaxError: invalid syntax

هذا النوع من الأخطاء لا يعني أن فكرة البرنامج خاطئة دائمًا، بل غالبًا يكون السبب بسيطًا جدًا: نقطتان منسيتان، قوس غير مغلق، علامة اقتباس ناقصة، استخدام = بدل ==، أو كتابة أمر بطريقة لا تناسب إصدار Python الذي تستخدمه.

في هذا الدرس من سلسلة مشكلة وحل على بايثون العرب، سنشرح معنى خطأ SyntaxError invalid syntax، وأشهر أسبابه، وكيف تصلحه خطوة بخطوة مع أمثلة عملية مناسبة للمبتدئين.

{getToc} $title={محتوى المقال}

{alertInfo} خطأ SyntaxError يحدث غالبًا قبل تشغيل البرنامج فعليًا، لأن مفسر Python لا يستطيع قراءة الكود بسبب مشكلة في طريقة الكتابة.

ما معنى SyntaxError invalid syntax في بايثون؟

كلمة Syntax تعني قواعد كتابة اللغة. وكما أن اللغة العربية أو الإنجليزية لها قواعد في ترتيب الكلمات، فإن Python أيضًا لها قواعد في كتابة الأوامر. عندما تخالف هذه القواعد، يظهر خطأ SyntaxError.

رسالة invalid syntax تعني أن هناك جزءًا في الكود مكتوبًا بطريقة غير صحيحة، لذلك لا يستطيع Python فهمه.

مثال خاطئ:

if 5 > 3
    print("صحيح")

السبب هنا أننا نسينا النقطتين : بعد شرط if.

الكود الصحيح:

if 5 > 3:
    print("صحيح")

السبب الأول: نسيان النقطتين بعد if أو for أو def

من أشهر أسباب خطأ SyntaxError invalid syntax في بايثون نسيان النقطتين : بعد بعض التعليمات التي تبدأ كتلة كود جديدة.

  • if
  • else
  • elif
  • for
  • while
  • def
  • class

مثال خاطئ مع if

age = 20

if age >= 18
    print("مسموح بالدخول")

الحل:

age = 20

if age >= 18:
    print("مسموح بالدخول")

مثال خاطئ مع for

for i in range(5)
    print(i)

الحل:

for i in range(5):
    print(i)
{alertSuccess} إذا ظهر لك SyntaxError بعد if أو for أو while أو def، تحقق أولًا من وجود النقطتين في نهاية السطر.

السبب الثاني: عدم إغلاق الأقواس

إذا فتحت قوسًا ولم تغلقه، قد يظهر خطأ SyntaxError. هذا يحدث كثيرًا مع print() أو العمليات الحسابية أو القوائم أو استدعاء الدوال.

مثال خاطئ:

print("Hello Python"

الحل:

print("Hello Python")

مثال آخر:

result = (10 + 5 * 2

الحل:

result = (10 + 5 * 2)

السبب الثالث: عدم إغلاق علامات الاقتباس

عند كتابة نص في بايثون، يجب وضعه بين علامات اقتباس. وإذا فتحت علامة اقتباس ولم تغلقها، سيظهر الخطأ لأن Python لا يعرف أين ينتهي النص.

مثال خاطئ:

print("مرحبا بك في بايثون)

الحل:

print("مرحبا بك في بايثون")

ويمكن أيضًا استخدام علامة اقتباس مفردة:

print('مرحبا بك في بايثون')
{alertWarning} تأكد أن النص يبدأ وينتهي بنفس نوع علامة الاقتباس: إما "..." أو '...'.

السبب الرابع: استخدام = بدل == داخل الشرط

من الأخطاء الشائعة أن يستخدم المبتدئ علامة = داخل الشرط، مع أن هذه العلامة مخصصة لإسناد قيمة إلى متغير. أما المقارنة فتكون باستخدام ==.

مثال خاطئ:

if age = 18:
    print("العمر 18")

الحل:

age = 18

if age == 18:
    print("العمر 18")

هذه نقطة مهمة جدًا، لأن = و == متشابهتان في الشكل، لكن معناهما مختلف تمامًا.

السبب الخامس: استخدام صياغة Python 2 في Python 3

قد تظهر مشكلة invalid syntax إذا نقلت كودًا قديمًا مكتوبًا بأسلوب Python 2 وحاولت تشغيله في Python 3.

مثال قديم لا يعمل في Python 3:

print "Hello"

في Python 3 يجب استخدام الأقواس مع print():

print("Hello")

السبب السادس: المشكلة قد تكون في السطر السابق

أحيانًا يشير Python إلى سطر معين، لكن السبب الحقيقي يكون في السطر الذي قبله. مثلًا، إذا نسيت إغلاق قوس أو علامة اقتباس في السطر السابق، فقد يظهر الخطأ في السطر التالي.

مثال:

print("Welcome"
name = "Ahmed"

قد تظن أن المشكلة في سطر name، لكن السبب الحقيقي هو أن سطر print قبله لم يتم إغلاق القوس فيه.

الحل:

print("Welcome")
name = "Ahmed"
{alertInfo} عند ظهور SyntaxError، لا تفحص السطر المشار إليه فقط، بل افحص السطر السابق أيضًا.

السبب السابع: استخدام اسم متغير غير صحيح

أسماء المتغيرات في بايثون لها قواعد. لا يمكن أن يحتوي اسم المتغير على مسافة، ولا يمكن أن يبدأ برقم، ولا يفضل استخدام رموز خاصة داخل الاسم.

مثال خاطئ:

my age = 20

الحل:

my_age = 20

مثال خاطئ آخر:

1name = "Ali"

الحل:

name1 = "Ali"

جدول سريع لأسباب SyntaxError وحلولها

السبب مثال على الخطأ الحل
نسيان النقطتين if age > 18 اكتب : في نهاية سطر الشرط
قوس غير مغلق print("Hello" أغلق القوس: print("Hello")
اقتباس غير مغلق "Python أغلق النص: "Python"
استخدام = بدل == if age = 18: استخدم == للمقارنة
صياغة Python 2 print "Hello" استخدم print("Hello")
اسم متغير خاطئ my age = 20 استخدم my_age = 20

كيف تصلح خطأ SyntaxError invalid syntax خطوة بخطوة؟

عندما يظهر الخطأ، لا تعدل الكود عشوائيًا. اتبع خطوات بسيطة ومنظمة حتى تصل إلى السبب بسرعة.

  1. اقرأ السطر الذي تشير إليه رسالة الخطأ.
  2. افحص السطر نفسه والسطر الذي قبله.
  3. تأكد من إغلاق الأقواس وعلامات الاقتباس.
  4. تأكد من وجود النقطتين بعد if و for و while و def.
  5. تأكد أنك تستخدم == للمقارنة وليس =.
  6. تأكد أن اسم المتغير لا يحتوي على مسافات ولا يبدأ برقم.
  7. إذا نقلت الكود من الإنترنت، تأكد أنه مناسب لإصدار Python الذي تستخدمه.
{alertSuccess} أفضل طريقة لحل SyntaxError هي مراجعة العلامات الصغيرة: النقطتين، الأقواس، الاقتباسات، وعلامات المقارنة.

مثال عملي كامل: كود خاطئ ثم تصحيحه

لنأخذ كودًا يحتوي على أكثر من خطأ:

name = "Ahmed"

if name == "Ahmed"
    print("مرحبا أحمد"

في هذا المثال يوجد خطآن:

  • نسيان النقطتين بعد شرط if.
  • نسيان إغلاق قوس print().

التصحيح:

name = "Ahmed"

if name == "Ahmed":
    print("مرحبا أحمد")

الناتج:

مرحبا أحمد

هل SyntaxError نفس IndentationError؟

ليسا نفس الخطأ دائمًا، لكنهما قريبان من حيث أن الاثنين يتعلقان بطريقة كتابة الكود. خطأ SyntaxError يعني أن هناك مشكلة في تركيب الكود عمومًا، أما IndentationError فيظهر عندما تكون المسافات البادئة غير صحيحة.

مثال:

if 10 > 5:
print("صحيح")

هنا المشكلة أن سطر print يجب أن يكون داخله مسافة بادئة.

الحل:

if 10 > 5:
    print("صحيح")

للتوسع أكثر في هذا الجزء، يمكنك قراءة: شرح المسافات البادئة Indentation في بايثون.

أخطاء قريبة قد يخلط بينها المبتدئ

أحيانًا يخلط المبتدئ بين SyntaxError وأنواع أخرى من الأخطاء. لذلك من المفيد معرفة الفرق السريع:

نوع الخطأ معناه ببساطة مثال شائع
SyntaxError مشكلة في طريقة كتابة الكود نسيان النقطتين بعد if
NameError استخدام اسم غير معرف طباعة متغير لم يتم إنشاؤه
TypeError استخدام نوع بيانات بطريقة غير مناسبة جمع نص مع رقم بدون تحويل
IndentationError مشكلة في المسافات البادئة عدم إزاحة الكود داخل شرط أو حلقة

أسئلة شائعة

ما سبب خطأ SyntaxError invalid syntax في بايثون؟

يظهر هذا الخطأ عندما تكتب كودًا لا يطابق قواعد Python، مثل نسيان النقطتين، عدم إغلاق الأقواس، عدم إغلاق علامات الاقتباس، استخدام = بدل ==، أو كتابة أمر بطريقة غير صحيحة.

لماذا يشير Python إلى سطر صحيح؟

أحيانًا يكون السطر المشار إليه صحيحًا، لكن المشكلة في السطر السابق، مثل قوس غير مغلق أو نص غير مكتمل.

كيف أعرف مكان الخطأ؟

اقرأ رسالة الخطأ، ثم افحص السطر المحدد والسطر الذي قبله، وراجع الأقواس والاقتباسات والنقطتين وعلامات المقارنة.

هل نسيان النقطتين يسبب SyntaxError؟

نعم. نسيان النقطتين بعد if أو for أو while أو def من أشهر أسباب هذا الخطأ.

هل اختلاف إصدار Python يسبب invalid syntax؟

نعم، قد يحدث ذلك إذا استخدمت كودًا مكتوبًا لصيغة قديمة مثل Python 2 داخل Python 3، مثل كتابة print "Hello" بدل print("Hello").

روابط مهمة من بايثون العرب

مصدر خارجي مفيد

يمكنك الرجوع إلى توثيق Python الرسمي لمعرفة المزيد عن الأخطاء والاستثناءات: Python Documentation - SyntaxError.

الخلاصة

خطأ SyntaxError: invalid syntax في بايثون يعني أن هناك مشكلة في طريقة كتابة الكود. غالبًا يكون السبب بسيطًا مثل نسيان النقطتين، أو عدم إغلاق قوس، أو عدم إغلاق علامة اقتباس، أو استخدام علامة خاطئة في الشرط.

تذكر دائمًا:

  • ضع النقطتين بعد if و for و while و def.
  • أغلق كل قوس تفتحه.
  • أغلق علامات الاقتباس في النصوص.
  • استخدم == للمقارنة و = للإسناد.
  • افحص السطر السابق إذا لم تفهم مكان الخطأ.
{alertSuccess} القاعدة الذهبية: عند ظهور SyntaxError، راجع العلامات الصغيرة قبل أن تفكر أن المشكلة كبيرة؛ غالبًا الحل يكون في نقطتين أو قوس أو علامة اقتباس.

إرسال تعليق

أحدث أقدم