Python原始字符串和尾随反斜杠
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的文件夹名称中特别有问题,因为反斜杠是路径分隔符。