2016-12-26 7 views
13

The f-string jest jedną z nowych funkcji w Pythonie 3.6.Dlaczego symbol "{" pozostaje przy ocenie f " {10}" w Pythonie 3.6?

Ale gdy próbuję to:

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

Nie mogę zrozumieć, dlaczego lewy nawias klamrowy '{' pozostaje w związku. Przypuszczałem, że wynik powinien być taki sam z str.format:

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

W PEP-0498 nie odpowiedzieć na to pytanie jednoznacznie. Co powoduje, że lewy nawias klamrowy pozostaje w wyniku i co powoduje tę różnicę między f-string i str.format()?

Odpowiedz

13

To jest błąd. Podejście, które obecnie pracuje jest użycie Unicode dosłownego \u005c dla \ zamiast:

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

lub, z podobnym skutkiem, stosując surowe f -string:

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

Korzystając '\' wydaje się, że dwie dziwne rzeczy dzieją się w tym samym czasie:

  • Kolejna postać ('{' tutaj) był uciekł, pozostawiając ją w wynikowy ciąg.
  • Sformatowana ciąg jest również oceniano, co jest dziwne i nie oczekuje

Sprawa w punkcie:

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

Tak czy inaczej, będę wypełnić raport o błędzie wkrótce (ponieważ widzę, że już tego nie zrobiłeś) i aktualizuję, gdy otrzymam odpowiedź.

Aktualizacja: Utworzono Issue 29104 -- Left bracket remains in format string result when '\' preceeds it, jeśli jesteś zainteresowany, spójrz na rozmowę.

Aktualizacja 2: Problem rozwiązany z PR 490.

Powiązane problemy