2012-04-04 2 views
0

В старой версии python при попытке форматирования строки будет получена ошибка формата 'str' без атрибута атрибута. params состоит из чего-то вроде [u'name', '12']. Как сделать следующее в форматировании% string?форматирование строки для python 2.5

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

ответ

3

Преобразование списка в кортеж и передать его в качестве формата аргумент:

msg_str = msg_str % tuple(params) 

Пример:

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

Примечания, он должен быть кортежем, передача списка напрямую не будет работать:

>>> '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

Использование оператора% интерполировать значения в строку формата

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

Пожалуйста, не отступа текста без кода. Синтаксис, выделяющий простой текст, не имеет большого смысла. – ThiefMaster

1
msg_str = msg_str % tuple(params) 
+0

По его словам, это список, поэтому он должен преобразовать его в кортеж. – ThiefMaster

+0

О, хорошо, я изменю его, чтобы преобразовать его в мои плохие – jamylak

2

В этом простом случае

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

Вы можете просто изменить msg_str к старому стилю

>>> "%s %s."%(("Hello", "world")) 
'Hello world.' 

Однако формат имеет немало возможностей помимо этого. Там нет прямого способа перевести это один

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

Используйте модуль строки, доступный в Python 2.5

import string 
tmp=string.Template("Hello ${name} !") 
print tmp.safe_substitute(name="John") 
Смежные вопросы