2016-12-19 5 views
3

Diese Frage vor beantwortet wurde, aber meine Zeichenfolge hat keine zusätzlichen geschweiften Klammern, die versauen die Formatierung würde, so im Moment habe ich völlig ahnungslos bin, warum der FehlerPython string.format KeyError

Fehler ist KeyError: Inhalt

html = """ 
    <table class=\"ui celled compact table\" model=\"{model}\"> 
     {theaders} 
     <tbody> 
      {content} 
     </tbody> 
    </table> 
    """ 
html = html.format(model=model) 
html = html.format(content=data) 
html = html.format(theaders=theaders) 
+2

* Beiseite *: Die Backslashes sind in diesem Beispiel nicht erforderlich. Ein Vorteil des Triple-Quoting einer Zeichenfolge besteht darin, dass jedes einzelne Anführungszeichen nicht mehr speziell ist. –

+0

Ich habe sie nur als Teil des Versuches, den Fehler herauszufinden :) – Mojimi

Antwort

10

Sie es Zeile für Zeile mit einem Wörterbuch tun konnte, und das Bestehen der dict als Keyword-Argumente u sing **

d=dict() 
d['model']=model 
d['content']=data 
d['theaders']=theaders 

html = html.format(**d) 
7

Sie die Werte in einem Rutsch füllen müssen:

html.format(model=model, content=data, theaders=theaders) 
+0

gibt es keine Möglichkeit, es in Teilen zu tun? – Mojimi

+1

@Mojimi Nicht direkt über ['str.format()'] (https://docs.python.org/2/library/stdtypes.html#str.format). [Template Strings] (https://docs.python.org/2/library/string.html#string.Template) verwenden diese Funktion mit ['safe_substitute()'] (https://docs.python.org/2 /library/string.html#string.Template.safe_substitute), aber mit einer anderen Platzhaltersyntax. Aber warum brauchst du es? – dhke

+1

ja, du könntest. Sie müssten "Inhalt" mit doppelten Klammern umgeben; 'theaders' mit vier Klammern (' {model} ... {{content}} .. {{{theaders}}}} '). ein bisschen ein hack ... –