当sprintf在linux上用python2列入字符串时输入错误

时间:2015-09-16 12:20:06

标签: python printf

当sprintf在linux上用python2列入字符串时

输入错误

x = [ 'aa', 'bbbb', 'ccccccc' ]
f = '%-10s%-10s%-10s'
s = f % x

TypeError:格式字符串

的参数不足

1 个答案:

答案 0 :(得分:5)

如果格式具有多个位置占位符,则%运算符要求右侧操作数必须是tupletuple的子类。

这就是你需要将参数转换为tuple

的原因
>>> f % tuple(x)
'aa        bbbb      ccccccc   '

另一方面,如果您使用具有单个右手值的格式字符串,那么您也应该谨慎,如果您不知道值的类型:

>>> foo = [1, 2, 3]
>>> 'The value is %s' % foo
'The value is [1, 2, 3]'
>>> foo = (1, 2, 3)
>>> 'The value is %s' % foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

因此,如果你不知道单个参数的类型,你应该总是将它包装成1元组:

>>> foo = (1, 2, 3)
>>> 'The value is %s' % (foo,)
'The value is (1, 2, 3)'

这就是为什么现在更好地使用新的 str.formatPEP 3101),特别是对于复杂的字符串,因为它更强大,更不容易出错:

>>> x = ['aa', 'bbbb', 'ccccccc']
>>> '{:10}{:10}{:10}'.format(*x)
'aa        bbbb      ccccccc   '