mirror of https://github.com/python/cpython
gh-55688: Add note about ending backslashes for raw strings (#94768)
Co-authored-by: hauntsaninja <hauntsaninja@gmail.com>
This commit is contained in:
parent
5369bba8c5
commit
b95b1b3b25
|
@ -1026,6 +1026,46 @@ What does 'UnicodeDecodeError' or 'UnicodeEncodeError' error mean?
|
||||||
See the :ref:`unicode-howto`.
|
See the :ref:`unicode-howto`.
|
||||||
|
|
||||||
|
|
||||||
|
.. _faq-programming-raw-string-backslash:
|
||||||
|
|
||||||
|
Can I end a raw string with an odd number of backslashes?
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
A raw string ending with an odd number of backslashes will escape the string's quote::
|
||||||
|
|
||||||
|
>>> r'C:\this\will\not\work\'
|
||||||
|
File "<stdin>", line 1
|
||||||
|
r'C:\this\will\not\work\'
|
||||||
|
^
|
||||||
|
SyntaxError: unterminated string literal (detected at line 1)
|
||||||
|
|
||||||
|
There are several workarounds for this. One is to use regular strings and double
|
||||||
|
the backslashes::
|
||||||
|
|
||||||
|
>>> 'C:\\this\\will\\work\\'
|
||||||
|
'C:\\this\\will\\work\\'
|
||||||
|
|
||||||
|
Another is to concatenate a regular string containing an escaped backslash to the
|
||||||
|
raw string::
|
||||||
|
|
||||||
|
>>> r'C:\this\will\work' '\\'
|
||||||
|
'C:\\this\\will\\work\\'
|
||||||
|
|
||||||
|
It is also possible to use :func:`os.path.join` to append a backslash on Windows::
|
||||||
|
|
||||||
|
>>> os.path.join(r'C:\this\will\work', '')
|
||||||
|
'C:\\this\\will\\work\\'
|
||||||
|
|
||||||
|
Note that while a backslash will "escape" a quote for the purposes of
|
||||||
|
determining where the raw string ends, no escaping occurs when interpreting the
|
||||||
|
value of the raw string. That is, the backslash remains present in the value of
|
||||||
|
the raw string::
|
||||||
|
|
||||||
|
>>> r'backslash\'preserved'
|
||||||
|
"backslash\\'preserved"
|
||||||
|
|
||||||
|
Also see the specification in the :ref:`language reference <strings>`.
|
||||||
|
|
||||||
Performance
|
Performance
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,11 @@ the first quote::
|
||||||
>>> print(r'C:\some\name') # note the r before the quote
|
>>> print(r'C:\some\name') # note the r before the quote
|
||||||
C:\some\name
|
C:\some\name
|
||||||
|
|
||||||
|
There is one subtle aspect to raw strings: a raw string may not end in
|
||||||
|
an odd number of ``\`` characters; see
|
||||||
|
:ref:`the FAQ entry <faq-programming-raw-string-backslash>` for more information
|
||||||
|
and workarounds.
|
||||||
|
|
||||||
String literals can span multiple lines. One way is using triple-quotes:
|
String literals can span multiple lines. One way is using triple-quotes:
|
||||||
``"""..."""`` or ``'''...'''``. End of lines are automatically
|
``"""..."""`` or ``'''...'''``. End of lines are automatically
|
||||||
included in the string, but it's possible to prevent this by adding a ``\`` at
|
included in the string, but it's possible to prevent this by adding a ``\`` at
|
||||||
|
|
Loading…
Reference in New Issue