2

我试图有一个脚本来为我生成一些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

有任何想法吗?

注释:这是生成文件的截断版本,对此没有评论。注[2]:'umpalumpa' 是一个占位符,以确保它是一个字符串。总有一天会成为真正的东西。

编辑:我正在使用 python 2.7

4

2 回答 2

6

正如您已经得到了为什么这不起作用的答案,一个更好的方法并且还建议使用 ifformat函数(如果您使用的是`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')
于 2012-10-23T05:25:55.527 回答
4

您需要在映射键后指定转换类型:

"%(bench)s_serial" % {'bench':'umpalumpa'}

注意s下划线前的。这里的输出仍然是"umpalumpa_serial".

转换类型始终是必需的,并且始终位于%和任何可选组件之后。

格式化三引号字符串文字和单引号字符串文字没有区别。

于 2012-10-23T05:22:07.927 回答