Python原始字面字符串

14
str = r'c:\path\to\folder\'   # my comment
  • IDE:Eclipse
  • Python2.6

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

2个回答

36

原始字符串字面值不会把反斜杠视为转义字符,除非后面紧跟的字符是限定字符串字面值的引号字符,此时反斜杠转义它。

设计动机在于原始字符串字面值确实只存在于输入正则表达式模式的方便性——没有任何其他设计目标。而正则表达式模式永远不需要以反斜杠结尾,但它们可能需要包含各种引号字符,因此有了这个规则。

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

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

(旁注:不要使用自己的标识符来遮蔽内置名称,如str——这是一种可怕的做法,没有任何好处,除非你养成了避免这种可怕做法的习惯,否则总有一天会发现一个难以调试的问题,当代码的某个部分践踏内置名称时,另一部分需要以其真正含义使用内置名称)。


略有不同的用法但类似的问题:如何使用b64encode()将一个字节对象编码为以反斜杠结尾的文本?如果我尝试 b'somestring',会出现错误;如果我尝试 b'somestring\',则会编码两个反斜杠。 - JerodG
原始字符串的这个特性只能在正则表达式模式中使用 \'\"。没有反斜线的引号,例如 '" 仍然不可用。那么,在正则表达式模式中 \'\" 的含义是什么?对我来说,即使仅在正则表达式模式中使用,该特性的缺点严重超过了优点。 - Roel Schroeven
我很想看到一些具体的例子,证明Python的原始文本字面量相对于更简单的“根本不解释”有优势。 - Roel Schroeven

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接