[英]Unexpected behaviour in interactive python
>>> r'\'
SyntaxError:扫描字符串文字时 EOL
我预计'\\'
为 output。
根据 Python 文档https://docs.python.org/3/reference/lexical_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) 分析器下降到stringescapeseq
而不是读取“字符串结尾”标记,因此以下单引号不会被解析为“原始字符串结尾”。
虽然不那么直观,但词法分析器(Python 目前使用 LL(1) 解析器)就是这样设计的。
如果您真的想要一个只有一个反斜杠的字符串,请使用'\\'
或"\\"
(没有r
前缀)。
参见字符串文字定义的最后一段:
即使在原始文字中,引号也可以用反斜杠转义,但反斜杠仍保留在结果中; 例如,
r"\""
是由两个字符组成的有效字符串文字:反斜杠和双引号;r"\"
不是有效的字符串文字(即使原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始文字不能以单个反斜杠结尾(因为反斜杠会转义后面的引号字符)。另请注意,单个反斜杠后跟换行符被解释为这两个字符作为文字的一部分,而不是作为续行.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.