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
我知道这是一个菜鸟问题,但对 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