الفرق بين المراجعتين ل"Python/string/Template/safe substitute"

من موسوعة حسوب
< Python‏ | string‏ | Template
اذهب إلى التنقل اذهب إلى البحث
 
(4 مراجعات متوسطة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:التابع <code>Template.safe_substitute()‎</code> في بايثون}}</noinclude>
 
<noinclude>{{DISPLAYTITLE:التابع <code>Template.safe_substitute()‎</code> في بايثون}}</noinclude>
 
 
هذا التابع مشابه للتابع <code>[[Python/string/Template/substitute|Template.substitute()]]‎</code> ، باستثناء أنّه لا يطلق خطأً أو [[Python/exceptions|استثناءً]] عند حدوث مشكلة أثناء عملية الاستبدال.
 
هذا التابع مشابه للتابع <code>[[Python/string/Template/substitute|Template.substitute()]]‎</code> ، باستثناء أنّه لا يطلق خطأً أو [[Python/exceptions|استثناءً]] عند حدوث مشكلة أثناء عملية الاستبدال.
  
سطر 13: سطر 12:
 
=== <code>mapping</code> ===
 
=== <code>mapping</code> ===
  
أي كائن شبيه [[Python/dict|بالقاموس]] يتضمّن مفاتيح مطابقة للمعرّفات المستخدمة في القالب. ويمكن بدلًا من ذلك أيضًا تقديم [[Python/arguments|معاملات مفتاحية]]، تكون فيها الكلمات المفتاحية مطابقة للمعرّفات المستخدمة في القالب.
+
أي كائن شبيه [[Python/dict|بالقاموس]] يتضمّن مفاتيح مطابقة للمعرّفات المستخدمة في القالب.
 +
 
 +
‎‎<code>**kwds‎</code>
 +
 
 +
يمكن بدلًا مما سبق تقديم [[Python/arguments|معاملات مفتاحية]]، تكون فيها الكلمات المفتاحية مطابقة للمعرّفات المستخدمة في القالب.
  
 
عند استخدام المعامل <code>mapping</code> مع المعاملات المفتاحية، تأخذ المعاملات المفتاحية الأولوية في حال وجود معرّفات متكرّرة بينهما.
 
عند استخدام المعامل <code>mapping</code> مع المعاملات المفتاحية، تأخذ المعاملات المفتاحية الأولوية في حال وجود معرّفات متكرّرة بينهما.
سطر 20: سطر 23:
 
يعيد التابع سلسلة نصية جديدة ناتجة عن إجراء الاستبدالات على السلسلة النصية الأصلية.
 
يعيد التابع سلسلة نصية جديدة ناتجة عن إجراء الاستبدالات على السلسلة النصية الأصلية.
  
هذا التابع مشابه للتابع <code>[[Python/string/Template/substitute|Template.substitute()]]‎</code>  باستثناء أنّه في حال غياب المعرّفات من المعامل <code>mapping</code> أو المعاملات المفتاحية، فلا تطلق اللغة الاستثناء <code>KeyError</code>، بل يظهر المعرّف الأصلي في السلسلة النصية الناتجة كما هو. إلى جانب ذلك، لا يتسبب ظهور العلامة <code>$</code> في بقية أجزاء السلسلة بإطلاق الخطأ <code>ValueError</code> بل يبقى الرمز كما هو.
+
هذا التابع مشابه للتابع <code>[[Python/string/Template/substitute|Template.substitute()]]‎</code>  باستثناء أنّه في حال غياب المعرّفات من المعامل <code>mapping</code> أو المعاملات المفتاحية، فلا تطلق اللغة الاستثناء <code>[[Python/built-in exceptions#KeyError|KeyError]]</code>، بل يظهر المعرّف الأصلي في السلسلة النصية الناتجة كما هو. إلى جانب ذلك، لا يتسبب ظهور العلامة <code>$</code> في بقية أجزاء السلسلة بإطلاق الخطأ <code>[[Python/built-in exceptions#ValueError|ValueError]]</code> بل يبقى الرمز كما هو.
  
 
صحيح أنّ هذا التابع يطلق بعض الاستثناء، ولكن سمّي هذا التابع بالآمن "safe" لأنّ عمليات الاستبدال تحاول دومًا إعادة سلسلة نصية قابلة للاستخدام عوضًا عن إطلاق الاستثناءات.  
 
صحيح أنّ هذا التابع يطلق بعض الاستثناء، ولكن سمّي هذا التابع بالآمن "safe" لأنّ عمليات الاستبدال تحاول دومًا إعادة سلسلة نصية قابلة للاستخدام عوضًا عن إطلاق الاستثناءات.  
سطر 56: سطر 59:
 
[[تصنيف:Python]]
 
[[تصنيف:Python]]
 
[[تصنيف:Python Method]]
 
[[تصنيف:Python Method]]
 +
[[تصنيف:Python Template]]

المراجعة الحالية بتاريخ 07:09، 18 يونيو 2018

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

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

safe_substitute(mapping, **kwds)

المعاملات

mapping

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

‎‎**kwds‎

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

عند استخدام المعامل 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()‎ : يؤدي هذا التابع عملية الاستبدال بالاعتماد على القالب ويعيد سلسلة نصية جديدة.

مصادر