2

Possible Duplicate:
why can’t I end a raw string with a \

Given r'\\' is equivalent to '\\\\', why r'\' isn't equivalent to '\\'?

What I got on my python3.2 was

print(r'\')
  File "<stdin>", line 1
    print(r'\')
              ^
SyntaxError: EOL while scanning string literal
Community
  • 1
  • 1
updogliu
  • 6,066
  • 7
  • 37
  • 50

1 Answers1

11

You cannot have a backslash as the last character in a raw string unless it is part of an even number of backslashes; it escapes the closing quote.

Compare this to:

>>> r'\ '
'\\ '

From the string literal documentation:

When an 'r' or 'R' prefix is present, a character following a backslash is included in the string without change, and all backslashes are left in the string. For example, the string literal r"\n" consists of two characters: a backslash and a lowercase 'n'. String quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character).

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
  • Oh, I see, otherwise there is no way to include `'` in a raw string. Thx. – updogliu Oct 27 '12 at 09:19
  • @updogliu: basically, you can only include *just* a `'` character (no backslash proceding it) by using double quotes (`r""`) or a tripple-quoted raw literal (`r'''string'''` or `r"""string"""`). – Martijn Pieters Oct 27 '12 at 09:27