تقنية

Formatter في بايثون: هل يرفض الوسيط غير المستخدم؟

Formatter(); {name}; name=bud; spare=leaf; own: bud.
الزائد لا يمنع النجاح.

Formatter القياسي لا يرفض وسيطًا زائدًا لم يرد في القالب؛ الفحص الافتراضي لا يفعل شيئًا. [1] [2]

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

لا، ينجح المثال رغم الوسيط الزائد. [1] [2]

  • Formatter القياسي لا يرفض وسيطًا زائدًا لم يرد في القالب؛ الفحص الافتراضي لا يفعل شيئًا. [1] [2]
  • على CPython 3.12.14، نستخدم Formatter() وقالب "{name}"؛ نمرر name="bud" وspare="leaf". [1] [2]
  • own تعطي "bud"؛ spare غير مستخدمة ولم تمنع النجاح. [1] [2]
  • تحكم: حذف spare من النداء يبقي الناتج "bud"؛ own==control تعطي True. [1] [2]
  • لكن قالب "{missing}" مع الوسيطين نفسيهما يرفع KeyError للمفتاح missing. نختبر الصنف القياسي، دون تخصيص فحص الزائد. [1] [2]

الفحص الافتراضي

Formatter القياسي لا يرفض وسيطًا زائدًا لم يرد في القالب؛ الفحص الافتراضي لا يفعل شيئًا. [1] [2]

قالب ووسيط زائد

على CPython 3.12.14، نستخدم Formatter() وقالب "{name}"؛ نمرر name="bud" وspare="leaf". [1] [2]

النجاح مع الزائد

own تعطي "bud"؛ spare غير مستخدمة ولم تمنع النجاح. [1] [2]

from string import Formatter formatter=Formatter() own=formatter.format("{name}",name="bud",spare="leaf") print(own) [1] [2]

Formatter(); {missing}; name=bud; spare=leaf; KeyError: missing.
المطلوب الغائب يسبب خطأ.

حذف الزائد وغياب المطلوب

تحكم: حذف spare من النداء يبقي الناتج "bud"؛ own==control تعطي True. [1] [2]

control=formatter.format("{name}",name="bud") print(own==control) try:formatter.format("{missing}",name="bud",spare="leaf") except KeyError as exc:print(type(exc).__name__,exc.args[0]) [1] [2]

لكن قالب "{missing}" مع الوسيطين نفسيهما يرفع KeyError للمفتاح missing. نختبر الصنف القياسي، دون تخصيص فحص الزائد. [1] [2]

المراجع

  1. Python Formatter
  2. CPython 3.12.14 Formatter

للتوسع: لغات البرمجة.

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