反斜线“\”符号在Python中有什么特别
在Python中,反斜线“\”符号代表转义符,在实际使用过程中要求\后面必须配合其他字符使用以达到特别的含义或功能。比如:
>>> print 'ab\ncd'
ab
cd
此处的\n代表的换行符,当然还有其他用法,比如\t、\v……
如何在字符串中表达反斜线本身?
答案是使用两个反斜线,即\。第一个反斜线取消另一个反斜线的转义。比如:
>>> print 'ab\\cd'
ab\cd
所以作为转义符使用时,反斜线“\”后面必须本配合其他字符一起使用,或两个反斜线成对使用。
还有另外一种方法是在字符串前加“r”,比如:
>>> print r'ab\cd'
ab\cd
当字符串前面加上字符“r”时,会取消对字符串中反斜线“\”的转义。
坑来了
>>> print r'\'
File "<stdin>", line 1
print r'\'
^
SyntaxError: EOL while scanning string literal
或者我们表示Windows中的路径,比如:
>>> print r'c:\windows\'
File "<stdin>", line 1
print r'c:\windows\'
^
SyntaxError: EOL while scanning string literal
这儿报错了,报错信息是“EOL while scanning string literal”(检测到非法的结束符)。试试看去掉字符串最后面的反斜线看看:
>>> print r'c:\windows'
c:\windows
成功执行。
原因分析
很显然,即使字符串前面加上了字符“r”,如果字符串尾部是反斜线“\”时,Python仍旧会将此反斜线“\”当成转义符对待,当成转义符时就要求反斜线“\”后面必须要带上其他字符或是两个反斜线“\”配合使用(很显然,此处最后的反斜线“\”把作为字符串定界符的单引号给转义成普通的字符了,导致其失去了定界符的作用。)。可是如果处于最末的反斜线“\”配合其他字符或是两个反斜线“\”配合使用,又与字符串前面的字符“r”的取消转义的功能之间产生冲突,如:
>>> print r'c:\windows\\'
c:\windows\\
总结
所以在实际使用过程中如果要使用字符串前缀“r”,要避免字符串最后一个字符是反斜线“\”。如果字符串最后一个字符一定要是反斜线“\”,可以使用\\
的方式来处理。