13
str = r'c:\path\to\folder\'   # my comment
  • IDE:日食
  • Python2.6

当字符串中的最后一个字符是反斜杠时,它似乎会转义最后一个单引号并将我的注释视为字符串的一部分。但是原始字符串应该忽略所有转义字符,对吗?有什么问题?谢谢。

4

2 回答 2

35

原始字符串文字不会将反斜杠视为启动转义序列,除非紧随其后的字符是分隔文字的引号字符,在这种情况下,反斜杠对其进行转义。

设计动机是原始字符串文字的存在实际上只是为了方便输入正则表达式模式——也就是说,对于此类文字存在其他设计目标。并且 RE 模式永远不需要以反斜杠结尾,但它们可能需要包含各种引号字符,这就是规则。

许多人确实尝试使用原始字符串文字来使他们能够以他们习惯的方式(使用反斜杠)输入 Windows 路径 - 但正如您已经注意到的那样,当您确实需要以反斜杠结尾的路径时,这种用法会失效。通常,最简单的解决方案是使用斜杠,Microsoft 的 C 运行时和所有版本的 Python 都支持在路径中完全等效:

s = 'c:/path/to/folder/'

(旁注:不要str用你自己的标识符隐藏内置名称,比如调试问题,当您的代码的某些部分践踏内置名称而另一部分需要使用内置名称的真正含义时)。

于 2010-08-19T00:29:57.090 回答
9

恕我直言,这是 Python 中的一个不一致之处,但它在文档中有所描述。转到倒数第二段:

http://docs.python.org/reference/lexical_analysis.html#string-literals

r"\" 不是有效的字符串文字(即使是原始字符串也不能以奇数个反斜杠结尾)

于 2010-08-19T00:40:43.107 回答