Python原始字符串和尾随反斜杠

13 浏览
0 Comments

Python原始字符串和尾随反斜杠

我曾经遇到过一件事,想知道这是不是Python的“bug”或者至少是一个设计不当的特性。我很好奇是否有人知道这种行为的正当理由。我刚刚在阅读《像Python专家一样编程》时想到了这个问题,目前为止我觉得这本书很有趣。我只熟悉Python 2.x系列。

原始字符串是以r为前缀的字符串。这非常好,因为我可以在正则表达式中使用反斜杠,而不需要在任何地方都加倍。对于在Windows上编写临时脚本也很方便,因为我也可以在那里使用反斜杠。(我知道我也可以使用正斜杠,但是临时脚本通常包含从Windows中其他地方复制粘贴的内容。)

所以很好!除非,当然,你真的想让你的字符串以反斜杠结尾。在“原始”字符串中没有办法做到这一点。

In [9]: r'\n'
Out[9]: '\\n'
In [10]: r'abc\n'
Out[10]: 'abc\\n'
In [11]: r'abc\'
------------------------------------------------
   File "", line 1
     r'abc\'
           ^
SyntaxError: EOL while scanning string literal
In [12]: r'abc\\'
Out[12]: 'abc\\\\'

所以,在闭引号之前有一个反斜杠是错误的,但是两个反斜杠会给你两个反斜杠!肯定不只是我一个人对此感到困扰吧?

对于为什么“原始”字符串是“原始的,除了反斜杠引号”,有什么想法吗?我的意思是,如果我想在其中嵌入单引号,我会在字符串周围使用双引号,反之亦然。如果我两者都想要,我会使用三引号。如果我真的想要在原始字符串中连续三个引号,那么我想我只能接受这样,但这被认为是“正确的行为”吗?

这在Windows的文件夹名称中特别有问题,因为反斜杠是路径分隔符。

0