我怎样才能打印在Pythonstring文字花括号字符,也使用它的格式?

x = " \{ Hello \} {0} " print x.format(42) 

给我: Key Error: Hello\\

我想打印输出: {Hello} 42

您需要加倍{{}}

 >>> x = " {{ Hello }} {0} " >>> print x.format(42) ' { Hello } 42 ' 

以下是格式string语法的Python文档的相关部分:

格式string包含花括号{}包围的“replace字段”。 任何不包含在大括号中的东西都被认为是文本文本,它被不变地复制到输出中。 如果您需要在字面文本中包含大括号字符,则可以通过加倍{{}}来使其转义。

你通过加倍括号来逃避它。

例如:

 x = "{{ Hello }} {0}" print x.format(42) 

尝试这样做:

 x = " {{ Hello }} {0} " print x.format(42) 

尝试这个:

x = "{{ Hello }} {0}"

OP写了这个评论:

 I was trying to format a small JSON for some purposes, like this: '{"all": false, "selected": "{}"}'.format(data) to get something like {"all": false, "selected": "1,2"} 

处理JSON时,出现“逃避括号”问题是很常见的。

我build议这样做:

 import json data = "1,2" mydict = {"all": "false", "selected": data} json.dumps(mydict) 

它比替代scheme更清洁,即:

 '{{"all": false, "selected": "{}"}}'.format(data) 

当JSONstring比示例更复杂时,使用json库是绝对可取的。

虽然不是更好,但仅供参考,您也可以这样做:

 >>> x = '{}Hello{} {}' >>> print x.format('{','}',42) {Hello} 42 

例如当有人想要打印{argument}时,它可能是有用的。 它可能比'{{{}}}'.format('argument')更可读'{{{}}}'.format('argument')

请注意,在Python 2.7之后,您省略了参数位置(例如{}而不是{0}

如果你要这么做的话,定义一个效用函数可以让你使用任意的大括号replace,比如

 def custom_format(string, brackets, *args, **kwargs): if len(brackets) != 2: raise ValueError('Expected two brackets. Got {}.'.format(len(brackets))) padded = string.replace('{', '{{').replace('}', '}}') substituted = padded.replace(brackets[0], '{').replace(brackets[1], '}') formatted = substituted.format(*args, **kwargs) return formatted >>> custom_format('{{[cmd]} process 1}', brackets='[]', cmd='firefox.exe') '{{firefox.exe} process 1}' 

请注意,这可以使用括号是一个长度为2的string或两个string的迭代(对于多字符分隔符)。

原因是, {}.format()的语法,所以在你的情况下.format()不能识别{Hello}所以它抛出一个错误。

您可以使用双花括号{{}}覆盖它,

 x = " {{ Hello }} {0} " 

要么

尝试%s的文本格式,

 x = " { Hello } %s" print x%(42) 

对我来说最好的解决scheme就是使用这个'{ob} Hello {cb} 42'.format(ob='{',cb='}')

之所以这样,是因为好运使用接受的答案打印下面的东西。

 a='Header' ob = '{' cb = '}' str = """ import {a} from '../actions/{a}'; class {a} {ob} constructor() {ob} {cb} somefuncSuccess(){ob} if(true){ob}{cb} {cb} {cb} """ str = str.format(a=a,ob=ob, cb=cb) print(str) 

输出:

 import Header from '../actions/Header'; class Header { constructor() { } somefuncSuccess(){ if(true){} } } 

如果必须在参数字典的键值或格式方法列表中加上大括号,请尝试以下操作:

 >>> "{o}Hello {a}{c}".format(**{"o":"{","c":"}","a":42}) '{Hello 42}'