我有以下代码
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
>>> 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 2.6中,你可以使用新的字符串格式化(在描述PEP 3101 ):
'Print percent % in sentence and not {0}'.format(test)
这是特别方便,因为你的字符串变得更加复杂。
你不能选择逃避%
,为%
总是取决于以下字符有特殊的含义。
在文档的Python,在该部分中的第二个表的bottem,它规定:
'%' No argument is converted, results in a '%' character in the result.
因此,你应该使用:
selectiveEscape = "Print percent %% in sentence and not %s" % (test, )
(请注意expicit变化的元组作为参数%
)
在不知道上面,我会做:
selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test)
随着知识,你显然已经有了。
如果格式化模板从文件中读取,你不能保证内容双打百分号,那么你可能有检测百分号并决定是否编程是一个占位符与否的开始。 然后解析器也应该认识样序列%d
(以及可使用的其他字母),而且%(xxx)s
等。
类似的问题可以用新的格式观察 - 文本可以包含花括号。
我曾尝试不同的方法来打印一个插曲标题,看看他们是如何工作的。 这是不同的,当我使用乳胶。
它的工作原理,在一个典型的案例“%%”和“串” +“%”。
如果您使用的乳胶,它的工作用“字符串” +“\%”
因此,在一个典型的案例:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(4,1)
float_number = 4.17
ax[0].set_title('Total: (%1.2f' %float_number + '\%)')
ax[1].set_title('Total: (%1.2f%%)' %float_number)
ax[2].set_title('Total: (%1.2f' %float_number + '%%)')
ax[3].set_title('Total: (%1.2f' %float_number + '%)')
与%标题的例子
如果我们用乳液:
import matplotlib.pyplot as plt
import matplotlib
font = {'family' : 'normal',
'weight' : 'bold',
'size' : 12}
matplotlib.rc('font', **font)
matplotlib.rcParams['text.usetex'] = True
matplotlib.rcParams['text.latex.unicode'] = True
fig,ax = plt.subplots(4,1)
float_number = 4.17
#ax[0].set_title('Total: (%1.2f\%)' %float_number) This makes python crash
ax[1].set_title('Total: (%1.2f%%)' %float_number)
ax[2].set_title('Total: (%1.2f' %float_number + '%%)')
ax[3].set_title('Total: (%1.2f' %float_number + '\%)')
我们得到这样的: 以%和乳胶例如标题