Python字符串格式化时包含未转义的"%s

17 投票
4 回答
25223 浏览
提问于 2025-04-15 22:47

在格式化字符串的时候,我的字符串里可能会有一个百分号 "%",但我不想让它被转换。为了避免这种情况,我可以通过转义字符串,把每个 "%" 改成 "%%" 来解决这个问题。

比如说:

'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")

手册可以在这里找到

文档还提到,旧的 % 格式化方法最终会从语言中移除,虽然这可能需要一些时间。新的格式化方法功能更强大,所以这是件好事。

撰写回答