2

古いバージョンのPythonでは、「str」オブジェクトに属性がありません。文字列をフォーマットしようとすると、フォーマットエラーが発生します。paramsは。のようなもので構成され[u'name', '12']ます。%文字列フォーマットで次のことを行う方法は?

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

5 に答える 5

6

リストをタプルに変換し、それを format 引数として渡します。

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 で利用可能な string モジュールを使用する

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