2009-04-27 35 views
30

當我運行在Python 2.5.2以下代碼:字符串在Python版本格式早於2.6

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屬性。

我該如何解決這個問題?

回答

7

你使用哪個Python版本?

編輯 對於Python 2.5,如果你想打印等類型,see here使用"x = %s" % (x)(用於打印字符串)

+0

Python 2.5.2 ... – user46646 2009-04-27 09:01:12

+5

str。format()僅適用於2.6+和py3k – 2009-04-27 09:03:33

8

我相信這是一個Python 3.0的功能,儘管它在2.6版本中。但是如果你有一個低於Python的版本,那種類型的字符串格式化將不起作用。

如果您試圖一般打印格式化字符串,請通過%運算符使用Python的printf樣式語法。例如:

print '%.2f' % some_var 
32

對於Python版本低於2.6,使用% operator到值序列內插成一個格式字符串:

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' 

在的事實,內置瓦爾()函數返回一個命名空間的映射屬性的組合,這樣可以非常方便:

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

雖然現有的答案描述的修復方向的原因,並點,他們沒有真正提供了實現的問題問什麼解決方案。

您有兩個選擇來解決問題。首先是升級到Python 2.6或更高版本,它支持format string construct。第二個選項是使用older string formatting with the % operator。你所呈現的等效代碼如下。

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

這段代碼在Python 2.5中產生與Python 2.6和更高版本中產生的完全相同的輸出。