str = r'c:\path\to\folder\' # my comment
- IDE:Eclipse
- Python2.6
当字符串中的最后一个字符是反斜杠时,似乎它会转义最后一个单引号,并将我的注释视为字符串的一部分。但原始字符串应该忽略所有转义字符,对吗?可能出了什么问题?谢谢。
原始字符串字面值不会把反斜杠视为转义字符,除非后面紧跟的字符是限定字符串字面值的引号字符,此时反斜杠会转义它。
设计动机在于原始字符串字面值确实只存在于输入正则表达式模式的方便性——没有任何其他设计目标。而正则表达式模式永远不需要以反斜杠结尾,但它们可能需要包含各种引号字符,因此有了这个规则。
许多人尝试使用原始字符串字面值来使其能够按照他们习惯的方式输入Windows路径(即使用反斜杠)——但正如你所注意到的,这种用法会在需要路径以反斜杠结尾时失效。通常,最简单的解决方案是使用正斜杠,Microsoft的C运行时和所有版本的Python都完全支持在路径中等同于反斜杠:
s = 'c:/path/to/folder/'
(旁注:不要使用自己的标识符来遮蔽内置名称,如str
——这是一种可怕的做法,没有任何好处,除非你养成了避免这种可怕做法的习惯,否则总有一天会发现一个难以调试的问题,当代码的某个部分践踏内置名称时,另一部分需要以其真正含义使用内置名称)。
在我看来,这是Python中的一个不一致之处,但它已经在文档中进行了描述。请转到倒数第二段:
http://docs.python.org/reference/lexical_analysis.html#string-literals
"\"不是一个有效的字符串字面值(即使原始字符串也不能以奇数个反斜杠结尾)
\'
或\"
。没有反斜线的引号,例如'
或"
仍然不可用。那么,在正则表达式模式中\'
或\"
的含义是什么?对我来说,即使仅在正则表达式模式中使用,该特性的缺点严重超过了优点。 - Roel Schroeven