تقنية

tabnanny في بايثون: لماذا يشكو من سطرين يبدوان متحاذيين؟

الغموض في السطر الثالث
نص مؤلف. [1] [2]

نفحص نصًا مؤلفًا. [1] [2]

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

لأن تساوي الموضع عند عرض واحد للتبويب لا يزيل غموض المسافة البادئة. [1] [2]

  • يطبع مثالنا 3: موقع NannyNag، لا نتيجة تنفيذ النص. [1] [2]
  • يبدأ pass الأول بتبويب، والثاني بثماني مسافات. [1] [2]
  • بعرض تبويب 8 يتساوى الموضعان؛ بعرض 1 يصبحان 1 و8. [1] [2]
  • بتبويب لكل سطر أو ثماني مسافات لكل سطر، يطبع OK. [1] [2]
  • اختبرنا 3.12.14؛ توثيق الوحدة ينبه إلى احتمال تغير واجهتها. [1] [2]

المثال

import io,tabnanny,tokenize
s="if True:\n\tpass\n        pass\n"
try:
 tabnanny.process_tokens(tokenize.generate_tokens(io.StringIO(s).readline))
except tabnanny.NannyNag as e:
 print(e.get_lineno())
else:
 print("OK")

[1] [2]

المحاذاة والغموض

في النص المؤلف، يمر الغموض من المرمِّز إلى process_tokens كـTabError، ثم يُرفع NannyNag. اتفاق المحاذاة عند 8 لا يكفي. [1] [2]

عرض واحد يغير المحاذاة
مقارنة مؤلفة. [1] [2]

الحدود

لم ننفذ النص s أو نفحص ملفًا. وOK يعني انتهاء هذا الفحص دون NannyNag، لا صحة برنامج كامل أو ضمان سلوكه. [1] [2]

المراجع

  1. Python: tabnanny وغموض المسافة البادئة
  2. CPython3.12.14: tabnanny.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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