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