2012-04-04 11 views
0

In älteren Version von Python, 'Str' Objekt hat kein Attribut 'Format Fehler wird ergeben, wenn ich versuche, Zeichenfolge formatieren. Params besteht aus etwas wie [u'name', '12']. Wie geht das in% String Formatierung?String-Formatierung für Python 2.5

def str(params): 
    ...... 
    if params: 
     msg_str = msg_str.format(*params) 

Antwort

3

die Liste zu einem Tupel konvertieren und es als Format Argument übergeben:

msg_str = msg_str % tuple(params) 

Beispiel:

>>> lst = [123, 456] 
>>> 'foo %d bar %d' % tuple(lst) 
'foo 123 bar 456' 

Hinweis, es muss ein Tupel sein, Übergeben der Liste direkt funktioniert nicht:

>>> 'foo %d bar %d' % lst 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: %d format: a number is required, not list 
2

den Operator% Verwenden Sie Werte in einen Format-String können

>>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam"} 
'spam 42' 
+1

Bitte einrücken nicht Ihren nicht-Code Text. Syntax Highlighting Klartext macht nicht viel Sinn. – ThiefMaster

1
msg_str = msg_str % tuple(params) 
+0

Entsprechend seiner Frage ist es eine Liste, also muss er sie in ein Tupel umwandeln. – ThiefMaster

+0

Oh in Ordnung, ich werde es ändern, um es mein schlechtes zu konvertieren – jamylak

2

In diesem einfachen Fall

>>> "{0} {1}.".format(*("Hello", "world")) 
'Hello world.' 

Sie die msg_str ändern, um den alten Stil

nur zu interpolieren
>>> "%s %s."%(("Hello", "world")) 
'Hello world.' 

Allerdings bietet das Format darüber hinaus einige Funktionen. Es gibt keinen straight forward Weg, um dieses ein

>>> "{1} {0}.".format(*("world", "Hello")) 
'Hello world.' 
0

Verwenden string-Modul in Python 2.5 zu übersetzen

import string 
tmp=string.Template("Hello ${name} !") 
print tmp.safe_substitute(name="John")