Merge with 3.6

This commit is contained in:
Jason R. Coombs 2016-11-06 11:27:50 -05:00
commit 692b97c848
2 changed files with 20 additions and 12 deletions

View file

@ -679,17 +679,22 @@ Some examples of formatted string literals::
A consequence of sharing the same syntax as regular string literals is A consequence of sharing the same syntax as regular string literals is
that characters in the replacement fields must not conflict with the that characters in the replacement fields must not conflict with the
quoting used in the outer formatted string literal. Also, escape quoting used in the outer formatted string literal::
sequences normally apply to the outer formatted string literal,
rather than inner string literals::
f"abc {a["x"]} def" # error: outer string literal ended prematurely 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"abc {a['x']} def" # workaround: use different quoting
f"newline: {ord('\n')}" # error: literal line break in inner string Backslashes are not allowed in format expressions and will raise
f"newline: {ord('\\n')}" # workaround: double escaping an error::
fr"newline: {ord('\n')}" # workaround: raw outer string
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, See also :pep:`498` for the proposal that added formatted string literals,
and :meth:`str.format`, which uses a related format string mechanism. and :meth:`str.format`, which uses a related format string mechanism.

View file

@ -382,11 +382,14 @@ f'{a * x()}'"""
]) ])
def test_no_escapes_for_braces(self): def test_no_escapes_for_braces(self):
# \x7b is '{'. Make sure it doesn't start an expression. """
self.assertEqual(f'\x7b2}}', '{2}') Only literal curly braces begin an expression.
self.assertEqual(f'\x7b2', '{2') """
self.assertEqual(f'\u007b2', '{2') # \x7b is '{'.
self.assertEqual(f'\N{LEFT CURLY BRACKET}2\N{RIGHT CURLY BRACKET}', '{2}') 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): def test_newlines_in_expressions(self):
self.assertEqual(f'{0}', '0') self.assertEqual(f'{0}', '0')