Python 为什么我只需要转义字符串文字中的最后一个反斜杠?

Python 为什么我只需要转义字符串文字中的最后一个反斜杠?,python,python-3.x,escaping,python-3.7,string-literals,Python,Python 3.x,Escaping,Python 3.7,String Literals,我有以下Python代码: localExtractpath = "D:\Python\From 0 to 1\Excel\" if os.path.exists(localZipPath): print("Cool! '" + localZipPath + "' exists...proceeding...") 这给了我一个错误: File "", line 2 localExtractpath = "D:\Python\From 0 to 1\Excel\"

我有以下Python代码:

localExtractpath = "D:\Python\From 0 to 1\Excel\"
if os.path.exists(localZipPath):
    print("Cool! '" + localZipPath + "' exists...proceeding...")
这给了我一个错误:

File "", line 2
    localExtractpath = "D:\Python\From 0 to 1\Excel\"
                                                 ^
SyntaxError: EOL while scanning string literal
当我转义字符串中的最后一个\时,代码会起作用。为什么我只需要转义最后一个\?

D:\Python\From 0 to 1\Excel\中的最后一个反斜杠是转义结束引号,因此在解释器看来,字符串是未终止的。事实上,如果要在字符串中使用文字反斜杠,必须转义所有反斜杠:

D:\\Python\\From 0 to 1\\Excel\\

D:\Python\From 0 to 1\Excel\中的最后一个反斜杠正在转义结束引号,因此在解释器看来,字符串是未终止的。事实上,如果要在字符串中使用文字反斜杠,必须转义所有反斜杠:

D:\\Python\\0到1\\Excel\\

为什么我只需要逃离最后的\

因为只有在最后一个\之后,才有一个符号与\一起构成转义序列-\转义引号符号作为字符串终止符的角色

如果\与后续符号不形成转义序列,则它将保持原样,即作为反斜杠符号本身

在您的情况下,\p、nor\F和nor\E都不构成允许的转义序列,因此符号本身按字面解释-原样

主动提出的解决方案:

使用前斜杠/而不是反斜杠\ 所有Windows系统调用也接受它们:

localExtractpath = "D:/Python/From 0 to 1/Excel/"
为什么我只需要逃离最后的\

因为只有在最后一个\之后,才有一个符号与\一起构成转义序列-\转义引号符号作为字符串终止符的角色

如果\与后续符号不形成转义序列,则它将保持原样,即作为反斜杠符号本身

在您的情况下,\p、nor\F和nor\E都不构成允许的转义序列,因此符号本身按字面解释-原样

主动提出的解决方案:

使用前斜杠/而不是反斜杠\ 所有Windows系统调用也接受它们:

localExtractpath = "D:/Python/From 0 to 1/Excel/"

其他答案是正确的:您应该避开所有的反斜杠,更好的是,您应该对路径元素使用正斜杠,您甚至可以查看库

但是,为了具体回答您的问题,即为什么问题只存在于最后一个问题中,而不存在于前面的反斜杠中,您应该看看定义

您将看到有一个简短的字符列表,其中反斜杠使某些字符变得特殊。对于其余部分,反斜杠视为其本身

例如,\n不是解释为包含两个字符和\n的字符串,而是解释为仅包含一个换行符的字符串。 \P、\F或\E各有两个字符,但情况并非如此,因为它们没有特定的含义

\和\'的特殊之处在于,它们允许在由相同字符分隔的字符串文字中分别插入或字符。
例如,“single:\'、double'和single:'、double:\是定义单:'、双字符串文字的两种方法。

其他答案是正确的:您应该避开所有反斜杠,更好的是,您应该对路径元素使用正斜杠,您甚至可以查看库

但是,为了具体回答您的问题,即为什么问题只存在于最后一个问题中,而不存在于前面的反斜杠中,您应该看看定义

您将看到有一个简短的字符列表,其中反斜杠使某些字符变得特殊。对于其余部分,反斜杠视为其本身

例如,\n不是解释为包含两个字符和\n的字符串,而是解释为仅包含一个换行符的字符串。 \P、\F或\E各有两个字符,但情况并非如此,因为它们没有特定的含义

\和\'的特殊之处在于,它们允许在由相同字符分隔的字符串文字中分别插入或字符。
例如,“single:\'、double'和single:'、double:\是定义单:'、双字符串文字的两种方法。

因为“\`在它后面转义双引号,所以字符串的格式不正确,因为“\`在它后面转义双引号,所以字符串的格式不正确