2

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)
0

5 Answers 5

6

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

msg_str = msg_str % tuple(params)

Example:

>>> 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
Sign up to request clarification or add additional context in comments.

Comments

3

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

Comments

2

Use the % operator to interpolate values into a format string

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

1 Comment

Please do not indent your non-code text. Syntax highlighting plain text doesn't make much sense.
1
msg_str = msg_str % tuple(params)

1 Comment

According to his question it's a list so he needs to convert it to a tuple.
0

Use string module available in Python 2.5

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.