SyntaxError:EOL在使用反斜杠转义时扫描字符串文字

时间:2015-07-01 18:39:32

标签: python error-handling escaping eol

我知道这是一个noob问题,但对Python来说是新手并试图理解以下内容:

为什么反斜杠转义工作没有错误:

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

但是当我尝试时:

>>> print "\\\"

我明白了:

SyntaxError: EOL while scanning string literal

5 个答案:

答案 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