当sprintf在linux上用python2列入字符串时输入错误
x = [ 'aa', 'bbbb', 'ccccccc' ]
f = '%-10s%-10s%-10s'
s = f % x
Run Code Online (Sandbox Code Playgroud)
TypeError:格式字符串的参数不足
的%操作者要求右边的操作数必须是一个tuple或一个子类tuple,如果格式具有多个位置的占位符.
这就是为什么你需要将参数转换为tuple:
>>> f % tuple(x)
'aa bbbb ccccccc '
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您使用具有单个右侧值的格式字符串,那么您也应该谨慎,如果您不知道值的类型:
>>> 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
Run Code Online (Sandbox Code Playgroud)
因此,如果您不知道单个参数的类型,则应始终将其包装为1元组:
>>> foo = (1, 2, 3)
>>> 'The value is %s' % (foo,)
'The value is (1, 2, 3)'
Run Code Online (Sandbox Code Playgroud)
这就是为什么现在更好地使用新的 str.format(PEP 3101),尤其是复杂的字符串,因为它更强大,更不容易出错:
>>> x = ['aa', 'bbbb', 'ccccccc']
>>> '{:10}{:10}{:10}'.format(*x)
'aa bbbb ccccccc '
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |