生活不易 我用pythonPython精选

Python-字符串前的“r”和字符串中的“\”配合使用时的一个

2016-10-25  本文已影响1011人  无聊的IT

反斜线“\”符号在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”,要避免字符串最后一个字符是反斜线“\”。如果字符串最后一个字符一定要是反斜线“\”,可以使用\\的方式来处理。

在发现此问题并查找原因时得到了“Crossin的编程教程4班”QQ群中的“梦在远方”的提醒与帮助,在此表示感谢。

上一篇下一篇

猜你喜欢

热点阅读