不是一个即时修复选项,但扩展agander的评论,使用str.format
至少可以保证你不会意外地填写任何非命名的占位符,而不会看到错误。这是因为它采用适当的方法调用的语法分离出从命名者的位置替换:
>>> '%s %(var)s' % {'var': 'x'}
"{'var': 'x'} x"
>>> '{} {var}'.format(var='x')
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
'{} {var}'.format(var='x')
IndexError: tuple index out of range
>>> '{} {var}'.format(8, var='x')
'8 x'
还有一个附带的好处是我用经常到Python支持不同取代语法,但它是一个有点虐待性功能炎。自从我写了很多的代码,组装SQL查询传递到DB接口,它使用%s
的占位符参数化查询,我做str.format
我所有的外层查询粘贴,这让该%s
占位符完全不受干扰,而不必不断逃避他们。
>>> '%s {var}'.format(var='x')
'%s x'
如果这是你有你期望得到通过您的输出通过%s
真正的原因,str.format
可以简化你的生活了很多。
来源
2012-01-09 23:21:26
Ben
这并没有真正回答你的问题,但对新代码的建议是使用['str.format'(http://docs.python.org/library/stdtypes.html#str.format)而不是'%s'语法。 – aganders3 2012-01-09 22:59:00
你能否用'%% s'替换'%s'? – 2012-01-09 23:00:13
@ aganders3最终可能这样做,代码中有相当位虽然 – nik3daz 2012-01-09 23:02:06