2
>>> b'potato {} potato'.format(u'potato') # return value matches the template
'potato potato potato'
>>> b'potato %s potato' % u'potato' # return value is coerced
u'potato potato potato'
在str.format
模板控制返回類型,但在str.__mod__
模板被「提拔」爲Unicode。防止類型強制使用字符串格式化模板時
- 有記錄/可靠的行爲嗎?
- 如何做百分比樣式替換,使返回類型匹配模板?
顯而易見的猜測不工作:
>>> b'potato %b potato' % u'potato'
ValueError: unsupported format character 'b' (0x62) at index 8
我沒有興趣在做類型檢查和/或明確的解碼/編碼的呼叫解決方案。理想情況下,如果模板變量是unicode對象並且不能編碼爲ascii,我希望模板可以提升UnicodeEncodeError
。
哇。看起來unicode/bytes的區別在Python 2中是模糊的和破裂的。如果只有某些版本的Python在那裏他們已經修復了這個...;) –
1)強制發生在'%s'轉換類型中,I很確定這是在文檔的轉換表中記錄的。 2)懷疑它:( –