格式化字符串时,我的字符串可能包含我不希望转换的模"%"
。我可以转义字符串并将每个"%"
更改为"%%"
作为解决方法。
例如,
'Day old bread, 50%% sale %s' % 'today!'
输出:
'Day old bread, 50% sale today'
但有逃避的替代方案吗?我希望使用dict可以使Python忽略任何非关键字转换 例如,
'Day old bread, 50% sale %(when)s' % {'when': 'today'}
但是Python仍然会看到第一个模%
并给出:
TypeError: not enough arguments for format string
答案 0 :(得分:24)
您可以(并且应该)使用new string .format()
method(如果您使用的是Python 2.6或更高版本):
"Day old bread, 50% sale {0}".format("today")
文档还说,旧的%
格式最终将从语言中删除,尽管这肯定需要一些时间。新的格式化方法更强大,所以这是一件好事。
答案 1 :(得分:2)
不是真的 - 转义你的%符号是你使用字符串格式化所付出的代价。您可以使用字符串连接:'Day old bread, 50% sale ' + whichday
如果有帮助......
答案 2 :(得分:2)
将'%'转换为'%%'不是一种解决方法。如果您使用字符串格式来表示'%'符号。如果您不想这样,您可以随时执行以下操作:
print "Day old bread, 50% sale " + "today"
e.g。不使用格式。
请注意,使用字符串连接时,请确保该变量是字符串(而不是例如None)或使用str(varName)
。否则你会得到类似'无法连接str和NoneType'的内容。
答案 3 :(得分:2)
您可以使用正则表达式将%替换为%%,其中%后面没有(
def format_with_dict(str, dictionary):
str = re.sub(r"%([^\(])", r"%%\1", str)
str = re.sub(r"%$", r"%%", str) # There was a % at the end?
return str % dictionary
这样:
print format_with_dict('Day old bread, 50% sale %(when)s', {'when': 'today'})
将输出:
日龄面包,今天50%销售
此方法有助于避免格式字符串"没有足够的参数。错误。