我正在尝试使用脚本为我生成一些makefile。我想格式化这个多行字符串,但是我收到了一个奇怪的错误。
代码:
make_content = """ PCC = pgcc
%(bench)_serial: src/main.c src/%(bench)_serial.c ../common/util.c
\t$(PCC) $(ACCFLAGS) -o bin/%(bench)_serial src/main.c src/%(bench)_serial.c
clean:
\trm -rf *.o *.oo bin/*""" % {'bench':'umpalumpa'}
错误:
Traceback (most recent call last):
File "./new_bench.py", line 27, in <module>
\trm -rf *.o *.oo bin/*""" % {'bench':'umpalumpa'}
ValueError: unsupported format character '_' (0x5f) at index 21
有什么想法吗?
注意:这是makefile的截断版本,没有评论。 注释[2]:'umpalumpa'是占位符,以确保它是一个字符串。有一天它会成为真实的东西。
编辑:我正在使用python 2.7
答案 0 :(得分:6)
因为你已经得到了为什么不起作用的答案,一个更好的方法,并建议使用if format
函数(如果你使用的是`Python 2.6+): -
"src/{bench}_serial.c".format(bench='umpalumpa')
所以,对于你的字符串,它变为: -
ake_content = """ PCC = pgcc
{bench}_serial: src/main.c src/{bench}_serial.c ../common/util.c
\t$(PCC) $(ACCFLAGS) -o bin/{bench}_serial src/main.c src/{bench}_serial.c
clean:
\trm -rf *.o *.oo bin/*""".format(bench='umpalumpa')
答案 1 :(得分:4)
映射键后需要specify a conversion type:
"%(bench)s_serial" % {'bench':'umpalumpa'}
请注意下划线前的s
。此处的输出仍为"umpalumpa_serial"
。
转换类型始终是必需的,并始终位于%
和任何可选组件之后。
格式化三引号字符串文字和单引号字符串文字之间没有区别。