web-dev-qa-db-ja.com

Python 2.6より前のバージョンの文字列フォーマット

Python 2.5.2で次のコードを実行すると:

_for x in range(1, 11):
    print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
_

私は得る:

_Traceback (most recent call last):
  File "<pyshell#9>", line 2, in <module>
    print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
AttributeError: 'str' object has no attribute 'format'
_

私は問題を理解していません。

dir('hello')からformat属性はありません。

どうすれば解決できますか?

34
user46646

str.formatメソッドは Python 3.0、およびバックポート)で導入 to Python 2.6以降。

47
SilentGhost

サンプルコードはPython 2.6以降で記述されているようです。ここで str.formatメソッドが導入されました

Python 2.6より前のバージョンでは、 %演算子 を使用して、値のシーケンスをフォーマット文字列に補間します。

for x in range(1, 11):
    print '%2d %3d %4d' % (x, x*x, x*x*x)

また、この演算子は、単なる位置引数の代わりに、マッピングからnameで補間できることに注意する必要があります。

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

組み込みのvars()関数がマッピングとして名前空間の属性を返すという事実と組み合わせて、これは非常に便利です:

>>> bar = 42
>>> foo = "spam"
>>> baz = None
>>> "%(foo)s %(bar)d" % vars()
'spam 42'
36
bignose

これはPython 3.0の機能ですが、バージョン2.6にあります。しかし、Python以下のバージョンがある場合、そのタイプの文字列フォーマット動作しないでしょう。

一般にフォーマットされた文字列を印刷しようとする場合は、%演算子。例えば:

print '%.2f' % some_var
8
hbw

既存の回答は原因を説明し、修正の方向性を示していますが、実際には、質問の内容を達成するソリューションを提供するものはありません。

問題を解決するには2つのオプションがあります。 1つ目は、Python 2.6以上にアップグレードすることです。これは format string construct をサポートします。

2番目のオプションは、 %演算子を使用した古い文字列フォーマット を使用することです。あなたが提示したものと同等のコードは次のようになります。

for x in range(1,11):
  print '%2d %3d %4d' % (x, x*x, x*x*x)

このコードは、Python 2.5でまったく同じ出力を生成します。サンプルコードがPython 2.6以降で生成するものと同じです。

7
Jason R. Coombs

どのPythonバージョンを使用しますか?

EditPython 2.5の場合、"x = %s" % (x)を使用(文字列の印刷用)

他のタイプを印刷する場合は、 こちらを参照

7
Loïc Wolff