2010-08-19 4 views
11
str = r'c:\path\to\folder\' # my comment 

IDE: Затмение python2.6Python сырой символьная строка

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

ответ

33

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

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

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

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

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

+3

+ 1 на Python, правильно интерпретирующий пути Windows, используя '/' –

+0

Немного другое использование, но аналогичный вопрос: как один b64encode() объект байта с буквальным обратным слэшем в конце? Если я попробую b'somestring \ "Я получаю сообщение об ошибке, если я b'somestring \\ ', он кодирует и обратную косую черту. – Jerod

8

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

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

г «\» не является допустимым строковый литерал (даже сырая строка не может закончиться в нечетного числа обратной косой черты)

Смежные вопросы