使用str.format输出到文件时的ValueError

时间:2015-04-26 17:01:31

标签: python

我想在文件中打印0.0 10次。但是,我在下面的代码中得到了无效的语法错误:

fl.write(('{:8.2f}\n'*10).format('0.0'*10))

我该如何解决这个问题?我确实希望尽可能简洁,不必明确写出0.0次。

1 个答案:

答案 0 :(得分:1)

你得到一个ValueError因为你试图将一个字符串格式化为浮点数:

('{:8.2f}\n'*10).format('0.0'*10)

f格式化程序需要一个浮点值,而不是像'0.00.00.00.00.00.00.00.00.00.0'这样的字符串,这就是你生成的。

不是格式化只使用字符串文字,而是具有固定值:

fl.write('    0.00\n' * 10)

或至少产生10个浮点数:

fl.write(('{:8.2f}\n'*10).format(*([0.0] * 10)))

此处*([0.0] * 10)生成一个列表对象,其中包含对浮点值0.0的十个引用,然后将该列表作为单独的参数应用于str.format()方法。

演示:

>>> import sys
>>> fl = sys.stdout
>>> fl.write('    0.00\n' * 10)
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
90
>>> fl.write(('{:8.2f}\n'*10).format(*([0.0] * 10)))
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
    0.00
90