Python格式化一个字符串,带有带有dict的双引号

时间:2016-06-24 10:45:21

标签: python string string-formatting

为什么在字符串中有双引号时使用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)

2 个答案:

答案 0 :(得分:3)

您忘记了转换类型代码:

>>> '%(x)s"%(y)s' % {'x': 1, 'y':2}
'1"2'

请注意s个字符串。语法为%(key)conversiontype。如果没有指示转换类型的字符,解析器会选择下一个字符,并在字符串中选择"

来自string formatting operations documentation

  

转换说明符包含两个或多个字符,并具有以下组件,这些组件必须按以下顺序出现:

     
      
  1. '%'字符,用于标记说明符的开头。
  2.   
  3. 映射键(可选),由带括号的字符序列组成(例如,(somename))。
  4.   
  5. 转换标志(可选),它会影响某些转换类型的结果。
  6.   
  7. 最小字段宽度(可选)。如果指定为'*'(星号),则从值的元组的下一个元素读取实际宽度,并且要转换的对象位于最小字段宽度和可选精度之后。
  8.   
  9. 精确(可选),以'.'(点)给出,后跟精度。如果指定为'*'(星号),则从值的元组的下一个元素读取实际宽度,并且要转换的值在精度之后。
  10.   
  11. 长度修饰符(可选)。
  12.   
  13. 转换类型。
  14.   

您提供了第1项和第2项(可选),但省略了第7项。

答案 1 :(得分:0)

正如您使用%s一样,您应该使用%(x)s。就像%"错误一样,%(x)"是错误的。您只需要添加那个小s

'%(x)s"%(y)s' % {'x': 1, 'y':2}

该字母是必需的,原因与正常格式化相同。您可以像以前一样使用d03df等。