0 0

Python自然字符串末尾的反斜杠10

我发现自然字符串末尾似乎不能是反斜杠···
比如:
path = r'C:\Windows\'


Python 2.6报错:
SyntaxError: EOL while scanning string literal

IronPython 2.6.2也报错:
File "<stdin>", line 1
    path = r'C:\Windows\'

           ^
SyntaxError: EOL while scanning single-quoted string

不是已经标记了自然字符串了么?反斜杠应该不会转义啊!

我尝试过以下两种写法:
path = r'C:\Windows\\'

path = r'C:\Windows\''

可以运行,但print得到的结果都不对,分别是 C:\Windows\\ 和 C:\Windows\'

请问用自然字符串如何表示末尾带反斜杠的字符串的?
2011年5月03日 18:49

5个答案 按时间排序 按投票排序

0 0

字符串的末尾,即使是原始(raw)字符串末尾也不能带奇数个反斜杠,因为这会引起后续引号的转义:比如r'C:\Windows\'这个字符串常量,后一个反斜杠会告诉解析器后面的单引号不是字符串的结尾,字符串由两个引号包围,少了一个引号结束字符串,所以出现"SyntaxError: EOL while scanning single-quoted string "这个错误;这说明原始字符串也不是100%的"raw",它影响字符串的开头和结尾,下面举几个例子:
r'C:\Windows'new'不是有效的字符串,前部分r'C:\Windows'已经是合法的字符串了,后面加上new'解析失败;
r'C:\Windows'\new'也会出错,错误原因同上,合法字符串r'C:\Windows'加上\new'让解析器解析失败;
r'C:\Windows\'new'不会出错,很多人理解的原始字符串会保留字符本来的意义,所以会认为字符串中r'C:\Windows\'已经是一个合法的字符串了,后面还跟着new'使得字符串不合法,其实这个字符串中r'C:\Windows\'不合法,应为后面的反斜杠告诉解析器"我后面的引号的意义已经被我转义了,在这里不是字符串的结尾,你可以继续进行解析"。

完成你的工作需求的三种方法:<1>r'C:\Windows\\'[:-1] <2>r'C:\Windows'+'\\' <3>'C:\\Windows\\'

希望对你有所帮助

2011年5月09日 09:50
0 0

字符串的末尾,即使是原始(raw)字符串末尾也不能带奇数个反斜杠,因为这会引起后续引号的转义:比如r'C:\Windows\'这个字符串常量,后一个反斜杠会告诉解析器后面的单引号不是字符串的结尾,字符串由两个引号包围,少了一个引号结束字符串,所以出现"SyntaxError: EOL while scanning single-quoted string "这个错误;这说明原始字符串也不是100%的"raw",它影响字符串的开头和结尾,下面举几个例子:
r'C:\Windows'new'不是有效的字符串,前部分r'C:\Windows'已经是合法的字符串了,后面加上new'解析失败;
r'C:\Windows'\new'也会出错,错误原因同上,合法字符串r'C:\Windows'加上\new'让解析器解析失败;
r'C:\Windows\'new'不会出错,很多人理解的原始字符串会保留字符本来的意义,所以会认为字符串中r'C:\Windows\'已经是一个合法的字符串了,后面还跟着new'使得字符串不合法,其实这个字符串中r'C:\Windows\'不合法,应为后面的反斜杠告诉解析器"我后面的引号的意义已经被我转义了,在这里不是字符串的结尾,你可以继续进行解析"。

希望对你有所帮助

2011年5月09日 09:45
0 0

用r无法表达的,碰到这种情况,还是老实的用:
s='c:\\windows\\'吧

2011年5月08日 14:55
0 0

这位兄台 我仔细研究了你说的问题
    觉得你可能想输出一个这样的字符串c:\windows\纯粹的路径,但是单纯的一个\字符在Python中没法表示,它在输出的时候会默认将其转义为c:\windows\\
    所以你看到的path='c:\\'  打印出的c:\\实际上就是你要的东西

希望我的回答对你有帮助

2011年5月04日 08:48
0 0

字符串续行用的

2011年5月03日 19:08

相关推荐

Global site tag (gtag.js) - Google Analytics