【问题标题】: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 参数列表中的一个参数...但是不,我真的很想将其打印到输出中...是的。

我该如何处理这种情况?

【问题讨论】:

    标签: python


    【解决方案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 中逃避 { 的好方法 :)
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多