Почему необработанные строковые литералы Python не могут заканчиваться одним обратным слешем?

Золотое правило заключается в том, чтобы НЕ под любыми обстоятельствами блокировать ваш браузер пользователей. После этого я обычно смотрю на время выполнения, за которым следует использование памяти (если вы не делаете что-то сумасшедшее, и в этом случае это может быть более высокий приоритет).

148
задан Yyttsa 4 July 2018 в 09:39
поделиться

7 ответов

Причина объяснена в части того раздела, который я выделил полужирным:

Строковых кавычек можно оставить с обратной косой чертой, , но обратная косая черта остается в строке; например, r"\"" литерал допустимой строки, состоящий из двух символов: обратная косая черта и двойная кавычка; r"\" не литерал допустимой строки (даже необработанная строка не может закончиться в нечетном числе обратных косых черт). А именно, необработанная строка не может закончиться в единственной обратной косой черте (так как обратная косая черта вышла бы из следующего символа кавычки). Обратите внимание также, что единственная обратная косая черта, сопровождаемая новой строкой, интерпретируется как те два символа как часть строки, не как продолжение строки.

, Таким образом, необработанные строки не являются 100%-ми сырыми данными, существует все еще некоторая элементарная обработка обратной косой черты.

115
ответ дан cdleary 9 September 2019 в 22:29
поделиться

Причина того, почему r'\' синтаксический неправильный, состоит в том, что, хотя строковое выражение является сырыми данными, используемые кавычки (единственный или двойной) всегда должны быть Escape, так как они отметили бы конец кавычки иначе. Таким образом, если Вы хотите выразить одинарную кавычку в единственной заключенной в кавычки строке, нет никакого другого пути, чем использование \'. То же запрашивает двойные кавычки.

, Но Вы могли использовать:

'\\'
3
ответ дан Gumbo 9 September 2019 в 22:29
поделиться

Comming от C это довольно ясный мне, что сингл \работает символом ESC, разрешающим Вам помещать специальные символы, такие как новые строки, вкладки и кавычки в строки.

, Который действительно запрещает \как последний знак, так как он выйдет "и сделает дроссель синтаксического анализатора. Но, как указано ранее \законно.

1
ответ дан 9 September 2019 в 22:29
поделиться

Это - способ, которым это! Я рассматриваю его как один из тех маленьких дефектов в Python!

я не думаю, что существует серьезное основание для него, но это определенно не анализирует; действительно легко проанализировать необработанные строки с \как последний знак.

выгода, если Вы позволите \быть последним знаком в необработанной строке тогда, то Вы не будете в состоянии поместить "в необработанной строке. Кажется, что Python пошел с разрешением" вместо того, чтобы позволить \как последний знак.

Однако это не должно доставлять неприятности.

, Если Вы волнуетесь по поводу неспособности легко записать пути папки окон такой как c:\mypath\ тогда беспокойство не, поскольку, можно представить их как r"C:\mypath", и, если необходимо добавить имя подкаталога, не делайте этого с конкатенацией строк, поскольку это не правильный способ сделать это так или иначе! используйте os.path.join

>>> import os
>>> os.path.join(r"C:\mypath", "subfolder")
'C:\\mypath\\subfolder'
20
ответ дан hasen 9 September 2019 в 22:29
поделиться

Другой пользователь, который с тех пор удалил их ответ (не уверенный, если они хотели бы быть признанными) предположил, что разработчики языка Python могут быть в состоянии упростить дизайн синтаксического анализатора при помощи тех же правил парсинга и расширение завершенных символов к необработанной форме машинально (если литерал был отмечен как сырые данные).

я думал, что это было интересной идеей и включает его как общественную Wiki для потомства.

2
ответ дан cdleary 9 September 2019 в 22:29
поделиться

некоторые подсказки:

1), если необходимо управлять обратной косой чертой для пути тогда, стандартный модуль Python os.path является другом. например:

os.path.normpath ('c:/folder1 /')

2), если Вы хотите создать строки с обратной косой чертой в нем, НО без обратной косой черты в конце Вашей строки тогда необработанная строка является Вашим другом (используют 'r' префикс перед Вашей литеральной строкой). например:

r'\one \two \three'

3), если необходимо снабдить префиксом строку в переменной X с обратной косой чертой тогда, можно сделать это:

X='dummy'
bs=r'\ ' # don't forget the space after backslash or you will get EOL error
X2=bs[0]+X  # X2 now contains \dummy

4), если необходимо создать строку с обратной косой чертой в конце тогда, комбинируют подсказку 2 и 3:

voice_name='upper'
lilypond_display=r'\DisplayLilyMusic \ ' # don't forget the space at the end
lilypond_statement=lilypond_display[:-1]+voice_name

теперь lilypond_statement содержит "\DisplayLilyMusic \upper"

да здравствует Python!:)

n3on

1
ответ дан 9 September 2019 в 22:29
поделиться

С тех пор \" позволяется в необработанной строке. Тогда это не может использоваться для идентификации конца строкового литерала.

, Почему бы не прекратить анализировать строковый литерал, когда Вы встречаетесь с первым"?

, Если бы это имело место, то \" не был бы позволен в строковом литерале. Но это.

8
ответ дан Brian R. Bondy 9 September 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: