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
属性はありません。
どうすれば解決できますか?
str.format
メソッドは Python 3.0、およびバックポート)で導入 to Python 2.6以降。
サンプルコードは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'
これはPython 3.0の機能ですが、バージョン2.6にあります。しかし、Python以下のバージョンがある場合、そのタイプの文字列フォーマット動作しないでしょう。
一般にフォーマットされた文字列を印刷しようとする場合は、%
演算子。例えば:
print '%.2f' % some_var
既存の回答は原因を説明し、修正の方向性を示していますが、実際には、質問の内容を達成するソリューションを提供するものはありません。
問題を解決するには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以降で生成するものと同じです。