str = r'c:\path\to\folder\' # my comment
当字符串中的最后一个字符是反斜杠时,它似乎会转义最后一个单引号并将我的注释视为字符串的一部分。但原始字符串应该忽略所有转义字符,对吧?可能有什么不对?感谢。
答案 0 :(得分:35)
原始字符串文字不会将反斜杠视为启动转义序列,除时,紧跟在后的字符是分隔文字的引号字符,在这种情况下反斜杠执行< / strong>逃避它。
设计动机是原始字符串文字真正存在只是为了方便输入正则表达式模式 - 这就是全部, no 这些文字存在其他设计目标。 RE模式永远不需要以反斜杠结尾,但是可能需要包含各种引号字符,从而规则。
许多人确实尝试使用原始字符串文字来使它们按照习惯的方式进入Windows路径(使用反斜杠) - 但是当您确实需要使用路径结束时,这种使用会中断反斜杠。通常,最简单的解决方案是使用 forward 斜杠,Microsoft的C运行时和所有版本的Python支持在路径中完全等效:
s = 'c:/path/to/folder/'
(旁注:不阴影内置名称,如str
,带有您自己的标识符 - 这是一种可怕的做法,没有任何好处,除非您养成习惯避免那种可怕的做法有一天你会发现你有一个讨厌的调试问题,当你的代码的某些部分践踏内置名称而另一部分需要在其真实中使用内置名称时意)。
答案 1 :(得分:9)
这是恕我直言,Python中的不一致,但它在文档中描述。转到最后一段:
http://docs.python.org/reference/lexical_analysis.html#string-literals
r“\”不是有效的字符串文字 (即使原始字符串也不能以 奇数个反斜杠)