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`.
|
||||
|
||||
|
||||
.. _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
|
||||
===========
|
||||
|
||||
|
|
|
@ -189,6 +189,11 @@ the first quote::
|
|||
>>> print(r'C:\some\name') # note the r before the quote
|
||||
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:
|
||||
``"""..."""`` or ``'''...'''``. End of lines are automatically
|
||||
included in the string, but it's possible to prevent this by adding a ``\`` at
|
||||
|
|
Loading…
Reference in New Issue