Уведомления

Группа в Telegram: @pythonsu

#1 Март 6, 2009 15:49:48

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование символов r''

>>> r'c:\dir1'
'c:\\dir1'
>>> r'c:\dir1\'
SyntaxError: EOL while scanning single-quoted string
>>>
Почему так? Python 2.5.*
Интерес, большей частью, теоретический :)



Офлайн

#2 Март 6, 2009 15:53:19

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Экранирование символов r''

r'c:\dir1\'
Заэкранировали последнюю скобку. Вообще обратные слеши в стринге надо экранировать.
Правильно так:
r'c:\\dir1\\'

Офлайн

#3 Март 6, 2009 16:33:40

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование символов r''

Вообще обратные слеши в стринге надо экранировать.
Разве? :)

>>> r'c:\\dir1\\'
'c:\\\\dir1\\\\'



Офлайн

#4 Март 6, 2009 17:19:56

Positive
От:
Зарегистрирован: 2008-12-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование символов r''

Ferroman
Вообще обратные слеши в стринге надо экранировать.
Всегда казалось, что в raw стрингах не надо.

Забавное поведение, конечно :)



Офлайн

#5 Март 6, 2009 17:33:38

test157
От:
Зарегистрирован: 2009-02-25
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование символов r''

хм прикольно. похоже на баг в интерпретаторе. выходит что неформатированная строка не может содержать одинарный слэш в конце?)

f = open('123.txt', ‘w’)
f.write(r'ffff\\')
f.close()
сохранит

f\nfff\\

а как сохранить f\nfff\ ?)



Отредактировано (Март 6, 2009 17:34:18)

Офлайн

#6 Март 6, 2009 18:16:29

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Экранирование символов r''

Действительно странно. Глюк судя по всему.

ЗЫ: если ставить пробел после последнего слеша - все ок.

Отредактировано (Март 6, 2009 18:18:10)

Офлайн

#7 Март 6, 2009 19:55:28

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Экранирование символов r''

Потому что в r'string' последний символ не может быть обратным слэшом. Вернее их количество в хвосте не может быть нечетным

Lanaguage reference: 2.4.1 String literals
When an “r” or “R” prefix is present, a character following a backslash is included in the string without change, and all backslashes are left in the string. For example, the string literal r“\n” consists of two characters: a backslash and a lowercase “n”. String quotes can be escaped with a backslash, but the backslash remains in the string; for example, r“\”“ is a valid string literal consisting of two characters: a backslash and a double quote; r”\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character). Note also that a single backslash followed by a newline is interpreted as those two characters as part of the string, not as a line continuation.



Отредактировано (Март 6, 2009 19:56:35)

Офлайн

#8 Март 6, 2009 20:16:52

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Экранирование символов r''

Документированный баг становится фичой. (с) Интернет

Офлайн

#9 Март 12, 2009 06:52:11

ReinRaus
От:
Зарегистрирован: 2008-10-24
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование символов r''

test157
хм прикольно. похоже на баг в интерпретаторе. выходит что неформатированная строка не может содержать одинарный слэш в конце?)

f = open('123.txt', ‘w’)
f.write(r'ffff\\')
f.close()
сохранит

f\nfff\\

а как сохранить f\nfff\ ?)
f=open('123.txt', 'w')
f.write(r'abc\ '.rstrip())
f.close()



Офлайн

#10 Март 12, 2009 07:17:25

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Экранирование символов r''

ReinRaus
r'abc\ '.rstrip()
Хм… Смешно…
r'abc\_'



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version