2017-10-24 2 views
4

Wird die folgende Syntax in Python 3.6 nicht von f-Strings unterstützt? Wenn ich meine f-string Verbindungslinie, wird die Substitution nicht auftreten:Wird der Verbindungsaufbau von f-Strings nicht unterstützt?

SUB_MSG = "This is the original message." 

MAIN_MSG = f"This longer message is intended to contain " \ 
      "the sub-message here: {SUB_MSG}" 

print(MAIN_MSG) 

kehrt:

This longer message is intended to contain the sub-message here: {SUB_MSG} 

Wenn ich die Zeile-Join zu entfernen:

SUB_MSG = "This is the original message." 

MAIN_MSG = f"This longer message is intended to contain the sub-message here: {SUB_MSG}" 

print(MAIN_MSG) 

funktioniert es wie erwartet :

This longer message is intended to contain the sub-message here: This is the original message. 

In PEP 498, Schrägstriche innerhalb ein f-String nicht ausdrücklich unterstützt:

Escape-Sequenzen

Umgekehrte Schrägstriche darf nicht in den Expressions Teilen der f-Strings erscheinen, so dass Sie sie nicht verwenden können, zum Beispiel, Zitate innen f-Strings zu entkommen:

>>> f'{\'quoted string\'}' 

Line-Joins ‚innerhalb des Ausdrucks Teil von f-str betrachtet und werden daher nicht unterstützt?

+1

Nicht * innerhalb der * Ausdruck Teile von f-Strings unterstützt, nicht an anderer Stelle. Fügen Sie auch 'f' zum zweiten String-Literal hinzu. Dies ist konsistent mit der Funktionsweise anderer String-Präfixe: 'len (r" \\ "" \\ "== 3). – Ryan

Antwort

6

Sie haben beide Strings als f -Strings zu markieren, damit es funktioniert, da sonst die zweite als normale Zeichenfolge interpretiert wird:

SUB_MSG = "This is the original message." 

MAIN_MSG = f"test " \ 
      f"{SUB_MSG}" 

print(MAIN_MSG) 

Nun, in diesem Fall können Sie auch nur die zweite Saite machen die f-string, weil der erst man nichts enthalten, zu interpolieren:

MAIN_MSG = "test " \ 
      f"{SUB_MSG}" 

Beachten Sie, dass diese alle String-Präfixe betreffen nicht nur f-Strings:

a = r"\n" \ 
    "\n" 
a # '\\n\n' <- only the first one was interpreted as raw string 

a = b"\n" \ 
    "\n" 
# SyntaxError: cannot mix bytes and nonbytes literals 
2

Versuchen Sie, diese (beachten Sie die extra „f“ auf der Fortsetzungszeile):

SUB_MSG = "This is the original message." 

MAIN_MSG = f"This longer message is intended to contain " \ 
     f"the sub-message here: {SUB_MSG}" 


print(MAIN_MSG) 
Verwandte Themen