Подстановки строк с использованием шаблонов в Python

Introduction

Строковый модуль имеет класс Template, который позволяет вам делать подстановки в строке, используя объект отображения, например:

>>> string.Template('var is $var').substitute({'var': 1})
'var is 1'

Метод замены может вызвать исключение KeyError, если, например, предпринята попытка заменить элемент, отсутствующий в отображении.

>>> string.Template('var is $var and foo is $foo').substitute({'var': 1})
KeyError: 'foo'

или может вызвать ValueError, если строка шаблона недопустима, например, он содержит$ за символом следует пробел:

>>> string.Template('$ var is $var').substitute({'var': 1})
ValueError: Invalid placeholder in string: line 1, col 1
The Problem

Учитывая строку шаблона и сопоставление, я хочу определить, будут ли заменены все заполнители в шаблоне. Для этого я бы попытался сделать замену и перехватить любое исключение KeyError:

def check_substitution(template, mapping):
    try:
        string.Template(template).substitute(mapping)
    except KeyError:
        return False
    except ValueError:
        pass
    return True

Но это не работает, потому что, если шаблон является недопустимым и возникает ошибка ValueError, последующие KeyErrors не обнаруживаются:

>>> check_substitution('var is $var and foo is $foo', {'var': 1})
False
>>> check_substitution('$ var is $var and foo is $foo', {'var': 1})
True

но яdon't care о ValueErrors. Итак, каков будет правильный подход к этой проблеме?

Ответы на вопрос(3)

Ваш ответ на вопрос