【问题标题】:string.Formatter does not accept "{}" template?string.Formatter 不接受“{}”模板?
【发布时间】:2013-06-24 20:40:34
【问题描述】:

Python 的 Formatter class“允许您使用与内置 format() 方法相同的实现来创建和自定义自己的字符串格式化行为”。既然可以做

>>> '{}'.format(3.14)
'3.14'

>>> format(3.14, '')
'3.14'

我希望以下内容也能正常工作:

>>> string.Formatter().format('{}', 3.14)
(…)
KeyError: ''

是否有任何标准方法可以使用 Formatter 处理这种非常常见且简单的格式化字符串?或者必须在表现得更像 Python 的format() 之前自定义格式化程序?这在robust way(线程安全,...)中真的可行吗?

【问题讨论】:

  • 我的猜测是格式化程序不需要理解{},因为这在 Python 2.6 和 3.0 中无效(而是需要{0})。
  • 问题Should string.Format是否也支持自动编号?bugs.python.org/issue5237#msg83559中讨论
  • 你引用的线程很有趣。自 2009 年开始以来,这方面似乎没有太大变化……如果得到证实,我会接受这个作为对问题的回答。 :)

标签: python formatting formatter


【解决方案1】:

Python 2.6/3.0 中新式字符串格式化的原始实现不允许空的{} 模板。允许它们的更改记录为issue 5237: Allow auto-numbered replacement fields in str.format() strings。在那个页面上,message 83559 from Eric V. Smith 思考了string.Format 是否也应该支持自动编号的问题(我想他的意思是string.Formatter)并得出了反对的结论。

已在issue 13598: string.Formatter doesn't support empty curly braces "{}" 中提出补丁。

【讨论】:

  • 讨论可以追溯到 2009 年:您是在暗示当时的结论是最新的并且仍然有效,对吧?
猜你喜欢
  • 2019-02-04
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多