曾经我遇到过一个问题,不知道它是Python的“bug”,还是至少算是一个缺陷。如果有人知道这种行为的任何理由,请告诉我。我刚刚在阅读《像Pythonista一样编码》时想起了它,这本书到目前为止非常有趣。我只熟悉Python 2.x系列。
原始字符串是以r
为前缀的字符串。这非常好,因为我可以在正则表达式中使用反斜杠,而且我不需要每个地方都加倍。对于在Windows上编写一次性脚本也很方便,因此我也可以在那里使用反斜杠。(我知道我也可以使用正斜杠,但是一次性脚本通常包含从Windows中其他地方剪切和粘贴的内容。)
太好了!除非你真的想让你的字符串以反斜杠结尾。在'raw'字符串中没有办法做到这一点。
In [9]: r'\n'
Out[9]: '\\n'
In [10]: r'abc\n'
Out[10]: 'abc\\n'
In [11]: r'abc\'
------------------------------------------------
File "<ipython console>", line 1
r'abc\'
^
SyntaxError: EOL while scanning string literal
In [12]: r'abc\\'
Out[12]: 'abc\\\\'
在闭引号前加一个反斜杠是错误的,但两个反斜杠会给你两个反斜杠! 我肯定不是唯一一个被这个问题困扰的人吧?
对于为什么“原始”字符串中的反斜杠-引号不是原始的,您有什么想法吗?我的意思是,如果我想要嵌入单引号,我会在字符串周围使用双引号,反之亦然。 如果我两个都想要,我就用三个引号。 如果我真的想在原始字符串中连续使用三个引号,好吧,我想我只能自己处理了,但这被视为“正确的行为”吗?
这在Windows中的文件夹名称中尤其棘手,因为反斜杠是路径分隔符。