为什么在字符串中有双引号时使用dict格式化失败?
'%(x)"%(y)' % {'x': 1, 'y':2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unsupported format character '"' (0x22) at index 4
适用于:
'%s"%s' % (1,2)
答案 0 :(得分:3)
您忘记了转换类型代码:
>>> '%(x)s"%(y)s' % {'x': 1, 'y':2}
'1"2'
请注意s
个字符串。语法为%(key)conversiontype
。如果没有指示转换类型的字符,解析器会选择下一个字符,并在字符串中选择"
。
来自string formatting operations documentation:
转换说明符包含两个或多个字符,并具有以下组件,这些组件必须按以下顺序出现:
'%'
字符,用于标记说明符的开头。- 映射键(可选),由带括号的字符序列组成(例如,
(somename)
)。- 转换标志(可选),它会影响某些转换类型的结果。
- 最小字段宽度(可选)。如果指定为
'*'
(星号),则从值的元组的下一个元素读取实际宽度,并且要转换的对象位于最小字段宽度和可选精度之后。- 精确(可选),以
'.'
(点)给出,后跟精度。如果指定为'*'
(星号),则从值的元组的下一个元素读取实际宽度,并且要转换的值在精度之后。- 长度修饰符(可选)。
- 转换类型。
醇>
您提供了第1项和第2项(可选),但省略了第7项。
答案 1 :(得分:0)
正如您使用%s
一样,您应该使用%(x)s
。就像%"
错误一样,%(x)"
是错误的。您只需要添加那个小s
:
'%(x)s"%(y)s' % {'x': 1, 'y':2}
该字母是必需的,原因与正常格式化相同。您可以像以前一样使用d
,03d
,f
等。