Строки сырых данных Python и запаздывающая обратная косая черта

Я натыкался на что-то когда-то давно и задался вопросом, был ли это Python "ошибка" или по крайней мере ошибка. Мне любопытно, если кто-либо знает о каких-либо выравниваниях для этого поведения. Я думал о нем сейчас чтение "Кода Как Pythonista", который был приятен до сих пор. Я только знаком с 2.x строка Python.

Необработанные строки являются строками, которые снабжаются префиксом r. Здорово, потому что я могу использовать обратные косые черты в регулярных выражениях, и я не должен удваивать все везде. Это также удобно для записи одноразовых сценариев в Windows, таким образом, я могу использовать обратные косые черты там также. (Я знаю, что могу также использовать наклонные черты вправо, но одноразовые сценарии часто содержат содержание cut&pasted откуда-либо в 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, где обратная косая черта является разделителем пути.

26
задан drevicko 28 October 2011 в 00:51
поделиться

2 ответа

Это FAQ .

И в ответ на «вы действительно хотите, чтобы ваша строка заканчивалась обратной косой чертой. В« сырой »строке этого не сделать.»: FAQ показывает, как это исправить.

>>> r'ab\c' '\\' == 'ab\\c\\'
True
>>>
19
ответ дан 28 November 2019 в 07:55
поделиться

Необработанные строки в основном предназначены для удобочитаемого написания шаблонов для регулярных выражений, которым никогда не требуется завершающая обратная косая черта; случайно они могут пригодиться для Windows (где вы в любом случае можете использовать косую черту в большинстве случаев - библиотека Microsoft C, лежащая в основе Python, принимает любую форму!). Считается неприемлемым, чтобы сделать (почти) невозможным написать шаблон регулярного выражения, содержащий как одинарные , так и двойные кавычки, просто для усиления рассматриваемой аварии.

(«Почти», потому что тройное цитирование почти всегда помогает ... но иногда это может быть немного неудобно).

Итак, да, необработанные строки были спроектированы таким образом (запрещая нечетное количество конечных обратных косых черт), и это считается совершенно «правильным поведением» для них, поскольку они соблюдают проектные решения, принятые Гвидо, когда он придумал их ;-).

4
ответ дан 28 November 2019 в 07:55
поделиться
Другие вопросы по тегам:

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