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

das*_*ang 26 python windows escaping

我曾经碰过一些东西,想知道这是一个Python"bug"还是至少是一个错误的.我很好奇是否有人知道这种行为的任何理由.我刚想起了"像Python一样的代码",到目前为止一直很愉快.我只熟悉2.x系列的Python.

原始字符串是以前缀为前缀的字符串r.这很好,因为我可以在正则表达式中使用反斜杠,我不需要在任何地方加倍.在Windows上编写一次性脚本也很方便,所以我也可以在那里使用反斜杠.(我知道我也可以使用正斜杠,但是一次性脚本通常包含从Windows其他地方剪切和粘贴的内容.)

很好!当然,除非你真的希望你的字符串以反斜杠结尾.在'原始'字符串中没有办法做到这一点.

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\\\\'
Run Code Online (Sandbox Code Playgroud)

所以在结束引号之前的一个反斜杠是一个错误,但是两个反斜杠给你两个反斜杠!当然,我不是唯一一个被这个困扰的人吗?

关于为什么'原始'字符串是'原始的,除了反斜杠引用'的想法?我的意思是,如果我想在那里嵌入单引号,我只是在字符串周围使用双引号,反之亦然.如果我想要两者,我只是三重引用.如果我真的想在原始字符串中连续三个引号,那么,我想我必须处理,但这被认为是"正确的行为"吗?

对于Windows中的文件夹名称,这尤其成问题,其中反斜杠是路径分隔符.

Joh*_*hin 19

这是一个FAQ.

并且回应"你真的希望你的字符串以反斜杠结束.在'原始'字符串中没有办法做到这一点.":常见问题解答显示了如何解决它.

>>> r'ab\c' '\\' == 'ab\\c\\'
True
>>>
Run Code Online (Sandbox Code Playgroud)

  • 当然看起来像是一种错误. (5认同)
  • @DS:您建议的原始字符串替代设计是......? (3认同)
  • 不知道这是一个常见问题,但可能应该假设.;)不是为@DS说话,但我的另类设计是"无法逃避处理".你知道,有点像它在锡上说的那样? (2认同)