2016-07-27 3 views
2

Ich versuche str.format() für Report-Header zu verwenden (dh Spalten) mit variabler Breite, aber ich kann nicht scheinen zu tun es eine int Variable:Keine int-Variablen in der Python-Zeichenkette replacement_field erlaubt?

hlist =['h1','h2','h3','h4'] 
width = 7 

for i in range(len(hlist)): 
    # print(hlist[i].center(width), end=' ')  # this works 
    print('{:^width}'.format(hlist[i]), end=' ') # this doesn't 
print() 

for i in range(len(hlist)): 
    # print('------'.center(width), end=' ')  # this works 
    print('{:-<width}'.format('-'), end=' ')  # this doesn't 
print() 

diesen Code Laufen gibt mir:

ValueError: Invalid format specifier 

Verwenden Sie alle int Literal anstelle von width funktioniert gut. Ich recherchierte here und ich dachte, dass ich nah mit dem format_spec arg kam, aber es sieht aus wie es nur nicht ganzzahlige Formate unterstützt. Ich versuchte auch int(), aber kein Glück.

Ich bin glücklich mit der Lösung, die mit funktioniert, aber ich suchte nach einer Möglichkeit, die neuere Syntax für mehr Flexibilität zu verwenden.

Jede Hilfe mit diesem würde sehr geschätzt werden!

Antwort

0

Sie müssen die Breite als Variable an die Format-Funktion übergeben, und lassen Sie wissen, dass Sie eine Variable mit dem Namen width, keine literale Zeichenfolge möchten. Da geschweifte Klammern geschachtelt werden können, tun Sie dies:

hlist =['h1','h2','h3','h4'] 
width = 7 

for i in range(len(hlist)): 
    print('{:^{width}}'.format(hlist[i], width=width), end=' ') 
print() 

for i in range(len(hlist)): 
    print('{:-<{width}}'.format('-', width=width), end=' ') 
print() 
+0

Das ist gut, danke. Ich bin brandneu, aber kannst du mir sagen, was mit der vorherigen Antwort auf diese Frage passiert ist? Es scheint entfernt worden zu sein. Ich dachte, dass Fragen gerade abgestimmt, nicht entfernt wurden ...? –

+0

Nicht wirklich sicher. Ich vermute, dass der Besitzer es gelöscht hat. Ich glaube nicht, dass es zu schrecklich war, auch wenn es nicht die kanonische Antwort war, also bezweifle ich, dass ein Moderator es entfernt hat. –

+0

In diesem Sinne könnten Sie eine Aufzählung erwägen und diese Antwort auswählen, selbst wenn die Frage geschlossen wurde. –

Verwandte Themen