mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
Merge with 3.6
This commit is contained in:
commit
692b97c848
2 changed files with 20 additions and 12 deletions
|
@ -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.
|
||||||
|
|
|
@ -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')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue