35

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

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

4

5 に答える 5

48

このstr.formatメソッドはPython3.0で導入され、Python2.6以降にバックポートされました。

于 2009-04-27T09:04:05.003 に答える
38

あなたのコード例は、str.formatメソッドが導入されたPython 2.6以降用に書かれているようです。

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

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

この演算子は、位置引数だけでなく、マッピングから名前で補間できることにも注意してください。

>>> "%(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'
于 2009-04-27T09:12:12.113 に答える
8

バージョン2.6ですが、これはPython3.0の機能だと思います。ただし、その下のバージョンのPythonを使用している場合、そのタイプの文字列フォーマットは機能しません。

一般にフォーマットされた文字列を印刷しようとしている場合は、%演算子を使用してPythonのprintfスタイルの構文を使用してください。例えば:

print '%.2f' % some_var
于 2009-04-27T09:01:14.883 に答える
7

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

編集Python2.5"x = %s" % (x)の場合、 (文字列の印刷に)を 使用します

他のタイプを印刷する場合は、ここを参照してください

于 2009-04-27T09:00:48.957 に答える
7

既存の回答は原因を説明し、修正の方向性を示していますが、質問が求めていることを達成する解決策を実際に提供するものはありません。

この問題を解決するには、2 つのオプションがあります。1 つ目は、フォーマット文字列構造をサポートする Python 2.6 以降にアップグレードすることです。

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

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

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

于 2010-02-04T17:16:01.010 に答える