String-Ersetzungen mit Vorlagen in Python

Einführung

Das Zeichenfolgenmodul verfügt über eine Template-Klasse, mit der Sie mithilfe eines Mapping-Objekts Ersetzungen in einer Zeichenfolge vornehmen können. Beispiel:

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

Die Ersatzmethode kann eine KeyError-Ausnahme auslösen, wenn beispielsweise versucht wird, ein Element zu ersetzen, das in der Zuordnung fehlt

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

oder kann einen ValueError auslösen, wenn die Vorlagenzeichenfolge ungültig ist, z. es enthält a$ Zeichen gefolgt von einem Leerzeichen:

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

Anhand einer Vorlagenzeichenfolge und einer Zuordnung möchte ich bestimmen, ob alle Platzhalter in der Vorlage ersetzt werden. Dazu würde ich versuchen, die Ersetzung vorzunehmen und eine KeyError-Ausnahme abzufangen:

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

Dies funktioniert jedoch nicht, da nachfolgende KeyErrors nicht abgefangen werden, wenn die Vorlage ungültig ist und ein ValueError ausgelöst wird:

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

aber ichist mir egal über ValueErrors. Also, was wäre der richtige Ansatz für dieses Problem?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage