以下两行有啥问题[重复]

Posted

技术标签:

【中文标题】以下两行有啥问题[重复]【英文标题】:What's wrong with the following two lines [duplicate]以下两行有什么问题[重复] 【发布时间】:2016-03-05 09:25:12 【问题描述】:

我正在尝试编写一段 python 代码来编写一段 CMake 代码...

但是当我进入以下阶段时:

def_desc = "blaa"
s = "    FILE(WRITE $CONFIG_H \"/* 0 */\\n\")\n".format(def_desc)

然后python对我大喊:

Traceback (most recent call last):
  File "/home/ferencd/tmp/blaa.py", line 2, in <module>
    s = "    FILE(WRITE $CONFIG_H \"/* 0 */\\n\")\n".format(def_desc)
KeyError: 'CONFIG_H'
[Finished in 0.0s with exit code 1]

我知道解释器以某种方式认为CONFIG_H 应该表示format 参数列表中的一个参数...但是不,我真的很想将其打印到输出中...是的。

我该如何处理这种情况?

【问题讨论】:

【参考方案1】:

你需要使用双括号:

s = "    FILE(WRITE $CONFIG_H \"/* 0 */\\n\")\n".format(def_desc)

不过,将模板库用于类似这样的东西要容易得多,比如 jinja 或 mako。

【讨论】:

使用模板库比使用单个参数的format 更容易?我对此表示怀疑。模板库在转义特殊字符时也会遇到同样的问题。 @interjay 使用模板库编写 cmake 文件(OP 提到的尝试这样做)比逐行组装更容易;-) @m.wasowski 我刚开始学习 python ... :) 但是感谢您提到模板库,我会尽快研究出来!【参考方案2】:

如果不用于格式变量,则需要转义括号“”。

def_desc = "blaa"
s = "    FILE(WRITE $CONFIG_H \"/* 0 */\\n\")\n".format(def_desc)

【讨论】:

好的,谢谢。今天我了解到 \ 不是在 python 中逃避 的好方法 :)

以上是关于以下两行有啥问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从行组合中查找重复项

从表的两行到视图中的值总和[重复]

如果cards后面的数据行有重复

OnStart 和 App Constructor 有啥区别[重复]

这个构造函数定义有啥好处[重复]

创建两行之和的新列,但每两行重复一次[重复]