2013-06-24 198 views
3

Python的Formatter class「允許您使用與內置format()方法相同的實現來創建和自定義您自己的字符串格式化行爲」。由於一個可以做string.Formatter不接受「{}」模板?

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

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

我期待下工作過:

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

是否有處理這個非常平常和簡單的格式化字符串與任何標準的方法格式化程序?或者在更像Python的format()之前,必須定製格式化程序?這是真的可行robust way(線程安全的,...)?

+0

我的猜測是格式化程序不需要理解'{}',因爲在Python 2.6和3.0中無效(改爲需要'{0}')。 –

+3

問題* string.Format是否還支持自動編號?*在http://bugs.python.org/issue5237#msg83559 –

+0

中討論過。您引用的線程很有趣。從2009年開始,這一方面看起來沒有太大的變化......如果確認了這一點,我會接受這個作爲對這個問題的迴應。 :) – EOL

回答

2

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 "{}"中提出了一個補丁。

+0

討論的歷史可以追溯到2009年:你暗示當時的結論是最新的,現在仍然有效,對吧? – EOL

+1

@EOL發現一個未解決的問題,更新了答案。 –