【问题标题】:SyntaxError: EOL while scanning string literal while using backslash escapeSyntaxError:在使用反斜杠转义时扫描字符串文字时 EOL
【发布时间】:2015-07-01 18:39:32
【问题描述】:

我知道这是一个菜鸟问题,但对 Python 来说是新手并试图理解以下内容:

为什么反斜杠转义在这里没有错误:

>>> print "this is \\\ a string"
this is \\ a string

但是当我尝试时:

>>> print "\\\"

我明白了:

SyntaxError: EOL while scanning string literal

【问题讨论】:

    标签: python error-handling escaping eol


    【解决方案1】:

    第一个反斜杠转义第二个反斜杠,第三个反斜杠转义双引号,然后无法终止字符串。您需要print "\\\\" 或print "\\\"",具体取决于您实际想要获得的输出。 (第一个将打印\\,第二个将打印\"。)

    【讨论】:

      【解决方案2】:

      您的第一个 \ 逃脱了您的第二个 \。现在第三个\ 等待转义另一个字符,而是得到' 并转义它。这就是它显示此错误的原因。如果您尝试这样做,您将遇到同样的错误

      >>> print 'abc    # Line ended while scanning string
      

      在这种情况下

      >>> print "this is \\\ a string"
      

      第三个\ 得到一个不是特殊字符的空格字符。因此第三个\ 不会转义任何内容,并且是字符串的一部分。

      【讨论】:

      • Nit:第三个反斜杠确实会转义空格,但转义的空格只会计算为空格。
      • 和说不逃是一样的。反斜杠只影响特殊字符
      【解决方案3】:

      当你这样做时:

      print "\\\"
      

      第一个\ 涵盖第二个,第三个涵盖"(引用本身)。所以它就像python没有看到结束引号,所以你得到了错误。

      【讨论】:

        【解决方案4】:

        只是对已经提到的内容的进一步说明,每次使用反斜杠时都会消耗它后面的字符。您可能知道,有些具有特殊含义,例如\t 会插入一个制表符。如您所见,\\ 旨在显示反斜杠。

        Python 还允许您在任何字符串前面加上 r 前缀,这表示禁用字符串内部的转义机制。例如,在您的第一个示例中,添加 r 将“按原样”显示所有三个反斜杠。

        print r"this is \\\ a string"
        this is \\\ a string
        

        但是请注意,如果您尝试第二个示例,即使这个技巧也会失败。您仍然需要避免在字符串的最后一个字符中使用反斜杠:

        print r"\\\"
        SyntaxError: EOL while scanning string literal
        

        【讨论】:

          【解决方案5】:

          这是因为你有三个反斜杠,所以前两个反斜杠表示转义的反斜杠,下一个反斜杠用于转义引号,因此导致问题的字符串没有真正的结束引号。

          在第一个字符串中,第三个反斜杠不会转义任何内容,因为它出现在一个不是特殊字符的空格之前,因此会被打印出来。

          如果你这样做 -

          print "\\\ "
          

          它可能有效(在 python 3.4 中为我工作)

          我的版本-

          >>> print("\\\ ")
          \\
          

          没有空格-

          >>> print("\\\")
            File "<stdin>", line 1
              print("\\\")
                         ^
          SyntaxError: EOL while scanning string literal
          

          【讨论】:

            猜你喜欢
            • 2020-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-30
            相关资源
            最近更新 更多