2016-12-26 4 views
13

f-stringは、Python 3.6の新機能の1つです。なぜPython 3.6でf " {10}"が評価されてもシンボル '{'は残っていますか?

しかし、私はこれを試してみてください。

>>> f"\{10}" 
'\\{10' 

左中括弧'{'が結果に残って、なぜ私が理解することはできません。

>>> "\{}".format(10) 
'\\10' 

PEP-0498では、それが明示的に答えていない:私は結果がstr.formatと同じであるべきであると仮定しました。その結果、左側の中かっこ'{'が結果に残り、その差はf-stringstr.format()の間にどのような原因がありますか?

答えて

13

これはバグです。

>>> f'\u005c{10}' 
'\\10' 

または、同様の効果を持つ、生f -string使用:それはと思われ'\'を使用することにより

>>> rf'\{10}' 
'\\10' 

を現在作品のアプローチではなく\のUnicodeリテラル\u005cを使用することです2つの奇妙なことが同時に起こる:

  • 次の文字(ここでは'{')はエスケープされ、結果の文字列(

    >>> f'\{2+3}' 
    '\\{5' 
    >>> a = 20 
    >>> f'\{a+30}' 
    '\\{50' 
    

    いずれかの方法では、私はすぐにバグレポートを記入することがあります:

  • フォーマットされた文字列はが奇数とポイントで

ケース期待されていないを、評価さもあります私はあなたがまだ持っていないことを知っているから)、私は返事を受け取ったときに更新する。

更新:作成Issue 29104 -- Left bracket remains in format string result when '\' preceeds it興味がある場合は、その会話をご覧ください。

更新2:問題がPR 490で解決されました。

関連する問題