>>> 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
私は型チェックおよび/または明示的なデコード/エンコードコールを行うソリューションに興味がないんです。理想的には、テンプレート変数がユニコードオブジェクトでasciiにエンコードできない場合は、テンプレートをUnicodeEncodeError
にすることをお勧めします。
ワウ。 Python 2ではユニコード/バイトの区別がぼやけて壊れているように見えますが、これは修正されたPythonのバージョンがある場合のみです;) –
1)強制変換は '%s'変換タイプIそれはドキュメントの変換テーブルに記載されていることは間違いありません。 2)それを疑う:( –