Я когда-то сталкивался с чем-то и задавался вопросом, была ли это "ошибка" на 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, где обратная косая черта - это дорожный разделитель.