string formatting for python 2.5

Go To


In older version of python, 'str' object has no attribute 'format error will be resulted if i try to format string. params consists of something like [u'name', '12']. How to do the following in % string formatting?

def str(params):
    if params:
       msg_str = msg_str.format(*params)
2012-04-04 06:45
by user1076881


Convert the list to a tuple and pass it as the format argument:

msg_str = msg_str % tuple(params)


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

Note, it must be a tuple, passing the list directly won't work:

>>> '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
2012-04-04 06:47
by ThiefMaster


In this simple case

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

You can just change the msg_str to the old style

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

However, format has quite a few capabilities beyond that. There is no straight forward way to translate this one

>>> "{1} {0}.".format(*("world", "Hello"))
'Hello world.'
2012-04-04 07:07
by John La Rooy


Use the % operator to interpolate values into a format string

>>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam"}
'spam 42'
2012-04-04 06:47
by avasal
Please do not indent your non-code text. Syntax highlighting plain text doesn't make much sense - ThiefMaster 2012-04-04 06:51


msg_str = msg_str % tuple(params)
2012-04-04 06:49
by jamylak
According to his question it's a list so he needs to convert it to a tuple - ThiefMaster 2012-04-04 06:50
Oh alright, i'll change it to convert it my ba - jamylak 2012-04-04 06:50


Use string module available in Python 2.5

import string
tmp=string.Template("Hello ${name} !")
print tmp.safe_substitute(name="John")
2014-08-24 14:39
by Volodimir Kopey