我知道这是一个noob问题,但对Python来说是新手并试图理解以下内容:
为什么反斜杠转义工作没有错误:
>>> print "this is \\\ a string"
this is \\ a string
但是当我尝试时:
>>> print "\\\"
我明白了:
SyntaxError: EOL while scanning string literal
答案 0 :(得分:4)
第一个反斜杠转义第二个反斜杠,第三个转义双引号,然后无法终止字符串。您需要print "\\\\"
或print "\\\""
,具体取决于您实际尝试获得的输出。 (第一个将打印\\
,第二个将打印\"
。)
答案 1 :(得分:2)
您的第一个\
逃脱了您的第二个\
。现在第三个\
等待转义另一个角色,而是获得'
并逃脱它。这就是它显示此错误的原因。如果您尝试执行此操作,则会出现同样的错误
>>> print 'abc # Line ended while scanning string
在这种情况下
>>> print "this is \\\ a string"
第三个\
获取一个不是特殊字符的空格字符。因此第三个\
不会转义任何东西,并且是字符串的一部分。
答案 2 :(得分:1)
这是因为你有三个反斜杠,所以前两个反斜杠表示一个转义反斜杠,下一个反斜杠用于转义引号,因此你的字符串没有真正的结束引号导致问题。
在第一个字符串中,第三个反斜杠不会转义任何内容,因为它出现在不是特殊字符的空格之前,因此会被打印。
如果你这样做 -
print "\\\ "
它可能有效(在python 3.4中为我工作)
我的版本 -
>>> print("\\\ ")
\\
没有空间 -
>>> print("\\\")
File "<stdin>", line 1
print("\\\")
^
SyntaxError: EOL while scanning string literal
答案 3 :(得分:1)
当你这样做时:
print "\\\"
第一个\
涵盖第二个,第三个涵盖"
(引用本身)。所以它像python没有看到结束引号,所以你得到了错误。
答案 4 :(得分:1)
进一步说明已经提到的内容,每次使用反斜杠时都会消耗后面的字符。您可能知道,有些具有特殊含义,例如\t
会插入制表符。正如您所见,\\
旨在显示反斜杠。
Python允许你做的是为r
添加任何字符串前缀,用于表示禁用字符串内的转义机制。例如,在第一个示例中,添加r
将显示所有三个反斜杠'。'
print r"this is \\\ a string"
this is \\\ a string
但要注意,如果你尝试第二个例子,即使这个技巧也会失败。您仍然需要避免在字符串的最后一个字符中使用反斜杠:
print r"\\\"
SyntaxError: EOL while scanning string literal