在旧版本的python中,'str'对象没有属性'如果我尝试格式化字符串,将导致格式错误。 params由[u'name', '12']
之类的东西组成。如何在%字符串格式中执行以下操作?
def str(params):
......
if params:
msg_str = msg_str.format(*params)
答案 0 :(得分:4)
将列表转换为元组并将其作为格式参数传递:
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
答案 1 :(得分:3)
在这个简单的案例中
>>> "{0} {1}.".format(*("Hello", "world"))
'Hello world.'
您只需将msg_str更改为旧样式
即可>>> "%s %s."%(("Hello", "world"))
'Hello world.'
然而,格式除此之外还有很多功能。没有直接的方法来翻译这个
>>> "{1} {0}.".format(*("world", "Hello"))
'Hello world.'
答案 2 :(得分:2)
使用%运算符将值插入格式字符串
>>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam"}
'spam 42'
答案 3 :(得分:1)
msg_str = msg_str % tuple(params)
答案 4 :(得分:0)
使用Python 2.5中提供的字符串模块
import string
tmp=string.Template("Hello ${name} !")
print tmp.safe_substitute(name="John")