簡體   English   中英

SyntaxError:EOL在使用反斜杠轉義時掃描字符串文字

[英]SyntaxError: EOL while scanning string literal while using backslash escape

我知道這是一個noob問題,但是Python的新手並試圖理解以下內容:

為什么反斜杠轉義在沒有錯誤的情況下工作:

>>> print "this is \\\ a string"
this is \\ a string

但是當我嘗試:

>>> print "\\\"

我明白了:

SyntaxError: EOL while scanning string literal

第一個反斜杠轉義第二個反斜杠,第三個轉義雙引號,然后無法終止字符串。 您需要print "\\\\\\\\"print "\\\\\\"" ,具體取決於您實際要獲得的輸出。(第一個將打印\\\\ ,第二個將打印\\" 。)

你的第一個\\逃脫你的第二個\\ 現在第三個\\等待轉義另一個角色,而是獲得'並逃脫它。 這就是它顯示此錯誤的原因。 如果您嘗試執行此操作,則會出現同樣的錯誤

>>> print 'abc    # Line ended while scanning string

在這種情況下

>>> print "this is \\\ a string"

第三個\\獲取一個不是特殊字符的空格字符。 因此第三個\\不會逃避任何東西,並且是字符串的一部分。

這是因為你有三個反斜杠,所以前兩個反斜杠表示一個轉義反斜杠,下一個反斜杠用於轉義引號,因此你的字符串沒有真正的結束引號導致問題。

在第一個字符串中,第三個反斜杠不會轉義任何內容,因為它出現在一個非特殊字符的空格之前,因此它會被打印出來。

如果你這樣做 -

print "\\\ "

它可能工作(在python 3.4中為我工作)

我的版本 -

>>> print("\\\ ")
\\

沒有空間 -

>>> print("\\\")
  File "<stdin>", line 1
    print("\\\")
               ^
SyntaxError: EOL while scanning string literal

當你這樣做時:

print "\\\"

第一個\\覆蓋第二個,第三個覆蓋" (引用本身)。所以它像python沒有看到結束引號,所以你得到錯誤。

關於已經提到的內容的進一步說明,每次使用反斜杠時都會消耗后面的字符。 您可能知道,有些具有特殊含義,例如\\t會插入制表符。 正如您所見, \\\\旨在顯示反斜杠。

Python允許你做的是用r前綴任何字符串,用於表示禁用字符串內的轉義機制。 例如,在第一個示例中,添加r將按原樣顯示所有三個反斜杠。

print r"this is \\\ a string"
this is \\\ a string

但要注意,如果你嘗試第二個例子,即使這個技巧也會失敗。 您仍然需要避免在字符串的最后一個字符中使用反斜杠:

print r"\\\"
SyntaxError: EOL while scanning string literal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM