我有下面的代码

test = "have it break."
selectiveEscape = "Print percent % in sentence and not %s" % test

print(selectiveEscape)

我想要得到输出:

Print percent % in sentence and not have it break.

实际发生了什么:

    selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str

当前回答

或者,从Python 2.6开始,你可以使用新的字符串格式(在PEP 3101中描述):

'Print percent % in sentence and not {0}'.format(test)

当你的字符串变得更复杂时,这尤其方便。

其他回答

如果格式化模板是从文件中读取的,并且您不能确保内容使百分号加倍,那么您可能必须检测百分号字符并以编程方式确定它是否是占位符的开始。然后,解析器还应该识别%d(和其他可以使用的字母)这样的序列,以及%(xxx)s等。

在新格式中也可以观察到类似的问题——文本可以包含花括号。

尝试使用%%打印%符号。

或者,从Python 2.6开始,你可以使用新的字符串格式(在PEP 3101中描述):

'Print percent % in sentence and not {0}'.format(test)

当你的字符串变得更复杂时,这尤其方便。

>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.

如果你正在使用Python 3.6或更新版本,你可以使用f-string:

>>> test = "have it break."
>>> selectiveEscape = f"Print percent % in sentence and not {test}"
>>> print(selectiveEscape)
... Print percent % in sentence and not have it break.