From f66f03bd358c3c481292f2624b8c947f4f77c370 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 6 Nov 2016 11:27:17 -0500 Subject: [PATCH] Update docs to reflect new behavior around backslashes in expressions (not allowed), matching recent changes to PEP 498. --- Doc/reference/lexical_analysis.rst | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst index a7c6a684c04..da7017afff0 100644 --- a/Doc/reference/lexical_analysis.rst +++ b/Doc/reference/lexical_analysis.rst @@ -679,17 +679,22 @@ Some examples of formatted string literals:: A consequence of sharing the same syntax as regular string literals is that characters in the replacement fields must not conflict with the -quoting used in the outer formatted string literal. Also, escape -sequences normally apply to the outer formatted string literal, -rather than inner string literals:: +quoting used in the outer formatted string literal:: f"abc {a["x"]} def" # error: outer string literal ended prematurely - f"abc {a[\"x\"]} def" # workaround: escape the inner quotes f"abc {a['x']} def" # workaround: use different quoting - f"newline: {ord('\n')}" # error: literal line break in inner string - f"newline: {ord('\\n')}" # workaround: double escaping - fr"newline: {ord('\n')}" # workaround: raw outer string +Backslashes are not allowed in format expressions and will raise +an error:: + + f"newline: {ord('\n')}" # raises SyntaxError + +To include a value in which a backslash escape is required, create +a temporary variable. + + >>> newline = ord('\n') + >>> f"newline: {newline}" + 'newline: 10' See also :pep:`498` for the proposal that added formatted string literals, and :meth:`str.format`, which uses a related format string mechanism.