Необработанная буквенная строка Python - PullRequest
13 голосов
/ 19 августа 2010
str = r'c:\path\to\folder\'   # my comment
  • IDE: Eclipse
  • python2.6

Когда последний символ в строке является обратной косой чертой, создается впечатление, что он уходит от последней одинарной кавычки и рассматривает мой комментарий как часть строки. Но необработанная строка должна игнорировать все escape-символы, верно? Что может быть не так? Спасибо.

Ответы [ 2 ]

35 голосов
/ 19 августа 2010

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

Мотивация проектирования заключается в том, что необработанные строковые литералы действительно существуют только для удобства ввода шаблонов регулярных выражений - вот и все, нет существует другая цель проектирования для таких литералов.И шаблоны RE никогда не должны заканчиваться обратной косой чертой, но они могут включать в себя все виды символов кавычек, откуда следует правило.

Многие люди пытаются использовать необработанные строковые литералы для включенияони вводят пути Windows так, как они привыкли (с обратной косой чертой) - но, как вы заметили, это использование прерывается, когда вам нужен путь, заканчивающийся обратной косой чертой.Как правило, самое простое решение - использовать forward slash, которые Microsoft C и все версии Python поддерживают как полностью эквивалентные в путях:

s = 'c:/path/to/folder/'

(примечание: don't теневые встроенные имена, такие как str, с вашими собственными идентификаторами - это ужасная практика, без каких-либо улучшений, и если вы не привыкнете избегать этой ужасной практики, однажды вы обнаружите, что вас с неприятнымпроблема для отладки, когда какая-то часть вашего кода попирает встроенное имя, а другая часть должна использовать встроенное имя в его реальном значении).

9 голосов
/ 19 августа 2010

Это ИМХО несоответствие в Python, но это описано в документации.Перейти ко второму последнему абзацу:

http://docs.python.org/reference/lexical_analysis.html#string-literals

r "\" не является допустимым строковым литералом (даже необработанная строка не может заканчиваться нечетным числом обратных косых черт)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...