交互式python中的意外行为

问题描述 投票:0回答:1
>>> r'\'

语法错误。扫描字符串文字时出现EOL

我以为 '\\' 作为输出。

python python-3.x string interactive python-3.8
1个回答
0
投票

根据Python文档 https:/docs.python.org3referencelexical_analysis.html#string-and-bytes-literals。:

shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
shortstringitem ::=  shortstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
stringescapeseq ::=  "\" <any source character>

看看词素的定义 shortstringchar很明显,即使是在一个原始的字符串中。r''r""在LL(1)分析器中,一个反斜杠后面的东西会被认为是字符串内容的一部分,因为LL(1)分析器会降级到 stringescapeseq 而不是读取 "字符串末尾 "标记,所以下面的单引号是 解析为 "原始字符串的结束"。

虽然没有那么直观,但词法分析器(Python到目前为止使用的是LL(1)解析器)就是这样设计的。

如果你真的想要一个只有一个反斜杠的字符串,使用 '\\'"\\" (没有 r 前缀)。)


0
投票

见最后一段的 字符串的定义:

即使在原始文字中,也可以用反斜线转义,但反斜线仍保留在结果中,例如。r"\"" 是一个有效的字符串文字,由两个字符组成:一个反斜杠和一个双引号。r"\" 不是一个有效的字符串文字(即使是一个原始字符串也不能以奇数的反斜杠结束)。具体来说。原始文字不能以一个反斜杠结束。 (因为反斜线会转义后面的引号字符)。 还要注意的是,一个反斜杠和一个换行符后面的字符会被解释为这两个字符是文字的一部分。 作为行的延续。

© www.soinside.com 2019 - 2024. All rights reserved.