SyntaxError: EOL while scanning string literal while using backslash escape

SyntaxError: EOL while scanning string literal while using backslash escape

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

为什么反斜杠转义在这里没有错误:

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

但是当我尝试时:

>>> print "\\"

我得到:

SyntaxError: EOL while scanning string literal

这是因为你有三个反斜杠,所以前两个反斜杠表示转义反斜杠,下一个反斜杠用于转义引号,因此你的字符串没有真正的结束引号导致问题。

在第一个字符串中,第三个反斜杠没有转义任何内容,因为它出现在 space 之前,这不是特殊字符,因此它被打印出来。

如果你这样做 -

print "\\ "

它可能有用(在 python 3.4 中为我工作)

我的版本-

>>> print("\\ ")
\

没有space-

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

第一个反斜杠转义了第二个反斜杠,第三个反斜杠转义了双引号,因此无法终止字符串。您需要 print "\\"print "\\"",具体取决于您实际尝试获得的输出。 (第一个将打印 \,第二个将打印 \"。)

你的第一个 \ 逃脱了你的第二个 \。现在第三个 \ 等待转义另一个字符,而是获取 ' 并转义它。这就是它显示此错误的原因。如果您尝试这样做,这与您将遇到的错误相同

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

在这种情况下

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

第三个 \ 得到一个 space 字符,这不是特殊字符。因此,第三个 \ 不会转义任何内容,并且是字符串的一部分。

当你这样做时:

print "\\"

第一个 \ 涵盖第二个,第三个涵盖 "(引用本身)。所以它就像 python 没有看到结尾的引号,所以你得到了错误。

进一步说明已经提到的内容,每次使用反斜杠时,它都会消耗后面的字符。您可能知道,有些具有特殊含义,例如 \t 会插入一个制表符。如您所见,\ 旨在显示反斜杠。

Python 还可以让您做的是在任何字符串前加上 r 前缀,这用于表示禁用字符串内部的转义机制。例如,在您的第一个示例中,添加 r 将显示所有三个反斜杠 'as is'.

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

但是请注意,如果您尝试第二个示例,即使这个技巧也会失败。您仍然需要避免在字符串的最后一个字符中使用反斜杠:

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