diff options
| author | Jason R. Coombs <jaraco@jaraco.com> | 2016-11-06 16:27:50 (GMT) |
|---|---|---|
| committer | Jason R. Coombs <jaraco@jaraco.com> | 2016-11-06 16:27:50 (GMT) |
| commit | 692b97c8482d36ad96f652ccd324094b60db12d5 (patch) | |
| tree | 3ea762e3dbf1e40ff15a329d9179d31a619148f3 | |
| parent | 32d93b2dc8e73af1965ec1986a84fefea17f30e4 (diff) | |
| parent | f66f03bd358c3c481292f2624b8c947f4f77c370 (diff) | |
| download | cpython-692b97c8482d36ad96f652ccd324094b60db12d5.zip cpython-692b97c8482d36ad96f652ccd324094b60db12d5.tar.gz cpython-692b97c8482d36ad96f652ccd324094b60db12d5.tar.bz2 | |
Merge with 3.6
| -rw-r--r-- | Doc/reference/lexical_analysis.rst | 19 | ||||
| -rw-r--r-- | Lib/test/test_fstring.py | 13 |
2 files changed, 20 insertions, 12 deletions
diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst index a7c6a68..da7017a 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. diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index 45f768c..086bf67 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -382,11 +382,14 @@ f'{a * x()}'""" ]) def test_no_escapes_for_braces(self): - # \x7b is '{'. Make sure it doesn't start an expression. - self.assertEqual(f'\x7b2}}', '{2}') - self.assertEqual(f'\x7b2', '{2') - self.assertEqual(f'\u007b2', '{2') - self.assertEqual(f'\N{LEFT CURLY BRACKET}2\N{RIGHT CURLY BRACKET}', '{2}') + """ + Only literal curly braces begin an expression. + """ + # \x7b is '{'. + self.assertEqual(f'\x7b1+1}}', '{1+1}') + self.assertEqual(f'\x7b1+1', '{1+1') + self.assertEqual(f'\u007b1+1', '{1+1') + self.assertEqual(f'\N{LEFT CURLY BRACKET}1+1\N{RIGHT CURLY BRACKET}', '{1+1}') def test_newlines_in_expressions(self): self.assertEqual(f'{0}', '0') |
