簡體   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