繁体   English   中英

交互式 python 中的意外行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM