美文网首页生活不易 我用pythonPython精选
Python-字符串前的“r”和字符串中的“\”配合使用时的一个

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

作者: 无聊的IT | 来源:发表于2016-10-25 11:33 被阅读1011次

    反斜线“\”符号在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群中的“梦在远方”的提醒与帮助,在此表示感谢。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/jsjruttx.html