Python字符串格式化时包含未转义的"%s
在格式化字符串的时候,我的字符串里可能会有一个百分号 "%"
,但我不想让它被转换。为了避免这种情况,我可以通过转义字符串,把每个 "%"
改成 "%%"
来解决这个问题。
比如说:
'Day old bread, 50%% sale %s' % 'today!'
输出结果:
'Day old bread, 50% sale today'
不过,除了转义,还有其他方法吗?我希望使用字典能让Python忽略任何非关键字的转换。
比如:
'Day old bread, 50% sale %(when)s' % {'when': 'today'}
但是Python还是会看到第一个百分号 %
,并给出:
TypeError: not enough arguments for format string
4 个回答
2
把 '%' 写成 '%%' 并不是解决办法。如果你在用字符串格式化,这就是表示 '%' 符号的方式。如果你不想这样做,可以试试下面的方法:
print "Day old bread, 50% sale " + "today"
比如说,不使用格式化。
请注意,当你在拼接字符串时,要确保变量是字符串类型(而不是像 None 这样的类型),或者使用 str(varName)
。否则你会遇到类似 'Can't concatenate str and NoneType' 的错误。
2
其实不是的——在使用字符串格式化的时候,你需要对百分号(%)进行转义,这就是你需要付出的代价。如果这样麻烦的话,你可以用字符串拼接的方法,比如:'过期的面包,50%优惠 ' + whichday
,这样也可以...
24
你可以(而且应该)使用新的字符串 .format()
方法(如果你使用的是 Python 2.6 或更高版本)来替代之前的写法:
"Day old bread, 50% sale {0}".format("today")
文档还提到,旧的 %
格式化方法最终会从语言中移除,虽然这可能需要一些时间。新的格式化方法功能更强大,所以这是件好事。