Однажды я наткнулся на что-то и подумал, что это за ошибка в Python или, по крайней мере, ошибка.Мне любопытно, если кто-нибудь знает какие-либо оправдания для такого поведения.Я думал об этом только сейчас, читая «Code Like a Pythonista», что до сих пор доставляло удовольствие.Я знаком только с строкой 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\\\\'
Так что одна обратная косая черта перед закрывающей кавычкой является ошибкой, но две обратные косые черты дают вам две обратные косые черты!Конечно, я не единственный, кого это беспокоит?
Мысли о том, почему «необработанные» строки являются «необработанными», за исключением обратной косой черты?Я имею в виду, если бы я хотел вставить туда одну кавычку, я бы просто использовал двойные кавычки вокруг строки, и наоборот.Если бы я хотел и то и другое, я бы просто тройную цитату.Если бы я действительно хотел три кавычки подряд в необработанной строке, я думаю, мне пришлось бы иметь дело с этим, но считается ли это «правильным поведением»?
Это особенно проблематично для имен папок в Windows,где обратный слеш - это разделитель пути.