String-Ersetzungen mit Vorlagen in Python
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 ProblemAnhand 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?