2016-12-26 68 views
13

f-string是Python 3.6中的新功能之一。爲什麼在Python 3.6中評估f「 {10}」時符號'{'仍然存在?

但當我嘗試這個辦法:

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

我想不通爲什麼左大括號'{'仍然在結果中。我推測,其結果應該是一樣與str.format

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

PEP-0498它並沒有明確回答這個問題。那麼是什麼原因導致左大括號'{'留在結果中,以及f-stringstr.format()之間的區別是什麼?

回答

13

這是一個錯誤。目前工作的一個方法是使用Unicode文本\u005c\代替:

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

,或者具有類似的效果,使用原始f -string:

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

通過使用'\'似乎這兩個奇怪的事情發生在同一時間:

  • 下一個字符('{'這裏)被轉義,讓它在結果字符串。
  • 格式化字符串也評估,這是奇怪的,而不是預期的

案例:

>>> 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

相關問題