【问题标题】:python: SyntaxError: EOL while scanning string literalpython:SyntaxError:EOL,同时扫描字符串文字
【发布时间】:2011-04-03 11:10:32
【问题描述】:

我在s1="some very long string............"有上述错误

有谁知道我做错了什么?

【问题讨论】:

  • 您确定它已正确关闭并且某处没有未转义的引号吗?
  • 未转义的引号引发另一个解析错误。

标签: python string string-literals


【解决方案1】:

您没有在行尾之前放置"

如果您想这样做,请使用"""

""" a very long string ...... 
....that can span multiple lines
"""

【讨论】:

  • 小心只用了三个引号,一不小心弄了四个就报错了
  • 如何连接字符串和变量?
  • @DanielSpringer 对于多行字符串的字符串,如果后面的字符串是单行,例如 """This is a multiline text.....""" + "Text in single line" 或者如果后者是多行,例如 ' """这是第一个多行文本..."""+"""这是第二个多行文本。"""'。
【解决方案2】:

我遇到了这个问题 - 我最终发现原因是我在字符串中包含了 \ 字符。如果您有任何这些,请使用\\“转义”它们,它应该可以正常工作。

【讨论】:

  • @Leo 他们被称为“转义字符”,这是非常标准的。您可以在字符串前加上r 以避免它们引起问题。
【解决方案3】:

(假设您的字符串中没有/想要换行符...)

这个字符串到底有多长?

我怀疑从文件或命令行读取的行的长度是有限制的,因为行尾被截断,解析器会看到类似 s1="some very long string.......... 的内容(没有结尾 " ) 从而引发解析错误?

您可以通过转义源代码中的换行符将长行拆分为多行,如下所示:

s1="some very long string.....\
...\
...."

【讨论】:

    【解决方案4】:

    在我的情况下,我的单引号字典字符串中有\r\n。我用\\r\n\\n 替换了\r 的所有实例,它解决了我的问题,在eval'ed dict 中正确返回了转义的换行符。

    ast.literal_eval(my_str.replace('\r','\\r').replace('\n','\\n'))
      .....
    

    【讨论】:

      【解决方案5】:

      我遇到了类似的问题。我有一个字符串,其中包含 Windows 中文件夹的路径,例如C:\Users\ 问题在于\ 是一个转义字符,因此为了在字符串中使用它,您需要再添加一个\

      不正确:C:\Users\

      正确:C:\\\Users\\\

      【讨论】:

      • 我有同样的问题,但这并不能解决问题。添加额外的 2 个斜线会使它们中的第一个逃脱第二个。最后一个斜线仍然会导致问题。
      【解决方案6】:

      你可以试试这个:

      s = r'long\annoying\path'
      

      【讨论】:

      • 这是最好的答案。也可以试试s = r'long\annoying\path\\'
      【解决方案7】:

      我也有这个问题,虽然这里有答案我想强调一点 后 / 不应该有空格,请注意

      【讨论】:

        【解决方案8】:

        我也收到了这个确切的错误消息,对我来说,问题是通过添加“\”来解决的

        事实证明,我的长字符串,分成大约八行,最后带有“\”,其中一行缺少一个“\”。

        Python IDLE 没有指定出现此错误的行号,但它以红色突出显示了一个完全正确的变量赋值语句,让我大吃一惊。实际畸形的字符串语句(多行带有“\”)与突出显示的语句相邻。也许这会对其他人有所帮助。

        【讨论】:

          【解决方案9】:

          就我而言,我使用的是 Windows,所以我必须使用双引号而不是单引号。

          C:\Users\Dr. Printer>python -mtimeit -s"a = 0"
          100000000 loops, best of 3: 0.011 usec per loop
          

          【讨论】:

            【解决方案10】:

            在我使用 Mac OS X 的情况下,我有以下声明:

            model.export_srcpkg(platform, toolchain, 'mymodel_pkg.zip', 'mymodel.dylib’)
            

            我得到了错误:

              File "<stdin>", line 1
            model.export_srcpkg(platform, toolchain, 'mymodel_pkg.zip', 'mymodel.dylib’)
                                                                                         ^
            SyntaxError: EOL while scanning string literal
            

            我改成之后:

            model.export_srcpkg(platform, toolchain, "mymodel_pkg.zip", "mymodel.dylib")
            

            成功了……

            大卫

            【讨论】:

              【解决方案11】:

              我在 postgresql 函数中遇到了这个错误。我有一个很长的 SQL,为了更好的可读性,我用 \ 分成了多行。然而,这就是问题所在。我删除了所有内容并将它们放在一行中以解决问题。我正在使用 pgadmin III。

              【讨论】:

                【解决方案12】:

                就我而言,我忘记了字符串末尾的 (' 或 ")例如 'ABC'"ABC"

                【讨论】:

                  【解决方案13】:

                  您的variable(s1) 跨越多行。为了做到这一点(即你希望你的字符串跨越多行),你必须使用三引号(“””)。

                  s1="""some very long 
                  string............"""
                  

                  【讨论】:

                    【解决方案14】:

                    在这种情况下,三个单引号或三个双引号都可以! 例如:

                        """Parameters:
                        ...Type something.....
                        .....finishing statement"""
                    

                        '''Parameters:
                        ...Type something.....
                        .....finishing statement'''
                    

                    【讨论】:

                      【解决方案15】:

                      我在访问任何硬盘目录时都遇到了同样的问题。 然后我就这样解决了。

                       import os
                       os.startfile("D:\folder_name\file_name") #running shortcut
                       os.startfile("F:") #accessing directory
                      

                      上图显示错误并解决输出。

                      【讨论】:

                        【解决方案16】:

                        之前的大部分答案都是正确的,我的答案与 aaronasterling 非常相似,你也可以做 3 个单引号 s1='''一些很长的字符串............'''

                        【讨论】:

                          【解决方案17】:

                          以下所有代码均使用 Python 3.8.3 测试


                          最简单的——只需使用三引号。
                          单人:

                          long_string = '''some
                          very 
                          long
                          string
                          ............'''
                          

                          或双倍:

                          long_string = """some
                          very 
                          long
                          string
                          ............"""
                          

                          注意:三引号字符串保留缩进,表示

                          long_string = """some
                              very 
                              long
                          string
                          ............"""
                          

                          long_string = """some
                              very 
                          long
                          string
                          ............"""
                          

                          甚至只是

                          long_string = """
                          some
                          very 
                          long
                          string
                          ............"""
                          

                          不一样
                          标准库中有一个 textwrap.dedent 函数来处理这个问题,尽管使用它不在问题范围内。


                          您也可以在字符串中使用\n,位于单行:

                          long_string = "some \nvery \nlong \nstring \n............"
                          

                          另外,如果您的字符串中不需要任何换行符(即换行符),您可以在常规字符串中使用 \

                          long_string = "some \
                          very \
                          long \
                          string \
                          ............"
                          

                          【讨论】:

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