为什么我不能用反斜杠结束原始字符串?

Ash*_*ary 8 python string rawstring

我在这里很困惑,即使原始字符串转换为每个\,\\\最后它出现时会引发错误.

>>> r'so\m\e \te\xt'
'so\\m\\e \\te\\xt'

>>> r'so\m\e \te\xt\'
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)

更新:

现在也在Python常见问题解答中介绍:为什么原始字符串(r-strings)不能以反斜杠结尾?

Eri*_*ric 10

你仍然需要\转义'"原始字符串,因为否则python解释器不知道字符串停止的位置.在你的例子中,你正在逃避结束'.

除此以外:

r'it wouldn\'t be possible to store this string'
r'since it'd produce a syntax error without the escape'
Run Code Online (Sandbox Code Playgroud)

看一下语法高亮,看看我的意思.

  • 这个答案是不正确的.r'\''在Python 3中产生"\\'",所以`实际上并没有逃脱```.在这种情况下,文档不清楚,没有进行转义,只是字符串文字解析会产生错误. (2认同)

Len*_*bro 6

原始字符串不能以单个反斜杠结尾,因为解析器的工作原理(尽管没有实际的转义).解决方法是在之后添加反斜杠作为非原始字符串文字:

>>> print(r'foo\')
  File "<stdin>", line 1
    print(r'foo\')
                 ^
SyntaxError: EOL while scanning string literal
>>> print(r'foo''\\')
foo\
Run Code Online (Sandbox Code Playgroud)

不漂亮,但它的工作原理.您可以添加加号以使其更清楚发生的事情,但没有必要:

>>> print(r'foo' + '\\')
foo\
Run Code Online (Sandbox Code Playgroud)


Kar*_*tel 5

Python 字符串的处理分两步:

  1. 首先,分词器寻找收盘价。当它执行此操作时,它会识别反斜杠,但不会解释它们 - 它只是查找后跟结束引号的字符串元素序列,其中“字符串元素”是(不是反斜杠、结束引号或换行符 - 除了三引号中允许换行符)或(反斜杠,后跟任何单个字符)。

  2. 然后根据字符串的类型来解释字符串的内容(处理反斜杠转义)。r字符串文字之前的标志仅影响此步骤。