2

在旧版本的python中,'str'对象没有属性'如果我尝试格式化字符串,将导致格式错误。params 由类似[u'name', '12']. 如何在 % 字符串格式中执行以下操作?

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

5 回答 5

6

将列表转换为元组并将其作为格式参数传递:

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
于 2012-04-04T06:47:47.327 回答
3

在这个简单的案例中

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

您可以将 msg_str 更改为旧样式

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

但是,除此之外,格式还有很多功能。没有直接的方法来翻译这个

>>> "{1} {0}.".format(*("world", "Hello"))
'Hello world.'
于 2012-04-04T07:07:22.580 回答
2

使用 % 运算符将值插入格式字符串

>>> "%(foo)s %(bar)d" % {'bar': 42, 'foo': "spam"}
'spam 42'
于 2012-04-04T06:47:52.077 回答
1
msg_str = msg_str % tuple(params)
于 2012-04-04T06:49:10.583 回答
0

使用 Python 2.5 中可用的字符串模块

import string
tmp=string.Template("Hello ${name} !")
print tmp.safe_substitute(name="John")
于 2014-08-24T14:39:39.420 回答