الفرق بين المراجعتين لصفحة: «Python/string/Template/safe substitute»

من موسوعة حسوب
< Python‏ | string‏ | Template
ط نقل عبد اللطيف ايمش صفحة Python/string/Template/safe-substitute إلى Python/string/Template/safe substitute
(لا فرق)

مراجعة 06:10، 18 يونيو 2018

هذا التابع مشابه للتابع Template.substitute() ، باستثناء أنّه لا يطلق خطأً أو استثناءً عند حدوث مشكلة أثناء عملية الاستبدال.

البنية العامة

safe_substitute(mapping, **kwds)

المعاملات

mapping

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

عند استخدام المعامل mapping مع المعاملات المفتاحية، تأخذ المعاملات المفتاحية الأولوية في حال وجود معرّفات متكرّرة بينهما.

القيمة المعادة

يعيد التابع سلسلة نصية جديدة ناتجة عن إجراء الاستبدالات على السلسلة النصية الأصلية.

هذا التابع مشابه للتابع Template.substitute() باستثناء أنّه في حال غياب المعرّفات من المعامل mapping أو المعاملات المفتاحية، فلا تطلق اللغة الاستثناء KeyError، بل يظهر المعرّف الأصلي في السلسلة النصية الناتجة كما هو. إلى جانب ذلك، لا يتسبب ظهور العلامة $ في بقية أجزاء السلسلة بإطلاق الخطأ ValueError بل يبقى الرمز كما هو.

صحيح أنّ هذا التابع يطلق بعض الاستثناء، ولكن سمّي هذا التابع بالآمن "safe" لأنّ عمليات الاستبدال تحاول دومًا إعادة سلسلة نصية قابلة للاستخدام عوضًا عن إطلاق الاستثناءات.

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

أمثلة

يبين المثال التالي النتائج المعادة من استخدام التابع:

>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'

انظر أيضًا

  • التابع Template.substitute()‎ : يؤدي هذا التابع عملية الاستبدال بالاعتماد على القالب ويعيد سلسلة نصية جديدة.

مصادر