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