تقنية

compile_command في بايثون: هل None تعني خطأ الصياغة؟

الحلقة تعطي None ثم code والتنفيذ سبعة
نتائج المثال في وضع single. [1] [2]

ميّز المدخل غير المكتمل من خطأ الصياغة. [1] [2]

الخلاصة السريعة

تعيد compile_command قيمة None للمدخل غير المكتمل، وكائن شيفرة للمكتمل الصالح. [1] [2]

  • نستعمل وضع single الافتراضي. [1] [2]
  • حلقتنا دون سطر جديد أخير غير مكتملة هنا. [1] [2]
  • إضافة سطر جديد تكمل هذا المثال. [1] [2]
  • تنفيذ الكائن صراحة يطبع 7. [1] [2]
  • حذف النقطتين من رأس الحلقة يرفع SyntaxError. [1] [2]

المثال

import codeop as c
s='for x in [7]:\n'
s+=' print(x)'
print(c.compile_command(s) is None)
r=c.compile_command(s+'\n')
print(type(r).__name__)
exec(r)

[1] [2]

المخرجات True ثم code ثم 7 في 3.12.14. [1] [2]

ثلاث حالات

عند حذف النقطتين، لا نعامل SyntaxError كطلب سطر إضافي؛ المدخل مخالف للصياغة. [1] [2]

غير المكتمل None والمكتمل code وحذف النقطتين SyntaxError
اختبرنا أيضًا رأس حلقة بلا نقطتين. [1] [2]

يختبر التنفيذ احتمال عدم الاكتمال قبل الترجمة النهائية. [1] [2]

حد المثال

إضافة سطر لا تصلح كل مدخل. الفحص لا يشغّل حلقتنا؛ استعملنا exec منفصلًا. [1] [2]

المراجع

  1. Python: codeop
  2. CPython 3.12.14: codeop.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.