python:SyntaxError:扫描字符串文字时出现 EOL

python: SyntaxError: EOL while scanning string literal

提问人:Alex Gordon 提问时间:8/25/2010 最后编辑:CryptoFoolAlex Gordon 更新时间:11/17/2023 访问量:1228037

问:

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

有谁知道我做错了什么?

python 字符串 string-literals

评论

3赞 quantumSoup 8/25/2010
您确定它被正确关闭并且某处没有未转义的引号吗?
1赞 JanC 8/25/2010
未转义的引号会引发另一个解析错误。
0赞 Karl Knechtel 5/27/2022
请注意,从 Python 3.10 开始,错误消息看起来会有所不同
0赞 wjandrea 7/1/2023
实际字符串是否以反斜杠结尾?像这样简单的事情会导致该错误。"\"

答:

286赞 aaronasterling 8/25/2010 #1

你没有在行尾之前放一个。"

如果要执行此操作,请使用:"""

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

评论

18赞 Oregano 12/10/2014
并且小心翼翼地只使用了三个引号,我不小心使用了四个引号,然后出现了错误
19赞 JanC 8/25/2010 #2

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

这个字符串到底有多长?

我怀疑从文件或命令行读取的一行的长度是有限制的,并且由于行尾被砍掉,解析器看到类似(没有结尾)的内容,从而抛出解析错误?s1="some very long string.........."

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

s1="some very long string.....\
...\
...."
123赞 Chris H 2/28/2011 #3

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

评论

5赞 eric 2/27/2019
@Leo他们被称为“逃生角色”,这是非常标准的。您可以在字符串之前放置一个以避免它们引起问题。r
0赞 scrollout 2/9/2022
@eric,如果 \ 不在字符串的最末尾,则可以这样做,例如 .我希望情况并非如此,但事实确实如此r'the cat in the hat\'
1赞 eric 2/10/2022
@scrollout好的观点,我真的希望他们能解决这个问题。它几乎违背了目的。
4赞 user12711 8/15/2013 #4

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

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

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

5赞 madhu131313 8/17/2013 #5

我也遇到过这个问题,虽然这里有答案,但我想对此提出一个重要的观点 之后不应有空格。注意它/

12赞 nicbou 10/24/2014 #6

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

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

评论

0赞 Noumenon 6/14/2022
起初我忽略了这个答案,因为它专注于\r\n。这里真正的问题是,每当它没有获得有效的 python 文字时,它就会引发此错误。就我而言,我用类似的东西打破了它。ast.literal_evalast.literal_eval('{"my": "dict"}"}')
13赞 Ashish kulkarni 12/31/2015 #7

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

不對:C:\Users\

正确:C:\\Users\\

评论

0赞 I.P. 3/25/2021
我有同样的问题,但这并不能解决问题。再放 2 个斜线会使它们中的第一个逃脱到第二个斜线。最后一个斜杠仍然会引起问题。
0赞 Karl Knechtel 8/7/2022
@I.P.,这似乎是帖子中的错别字;现在应该修复它。但是,另请参阅 Python 中的 Windows 路径
4赞 Aminah Nuraini 9/9/2016 #8

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

C:\Users\Dr. Printer>python -mtimeit -s"a = 0"
100000000 loops, best of 3: 0.011 usec per loop
3赞 Ram Dwivedi 1/29/2018 #9

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

4赞 us_david 8/3/2018 #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")

成功了。。。

大卫

2赞 Khandelwal-manik 10/13/2018 #11

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

s1="""some very long 
string............"""
9赞 ZakS 11/3/2019 #12

你可以试试这个:

s = r'long\annoying\path'

评论

6赞 shahar_m 1/13/2020
这是最好的答案。也可以试试。s = r'long\annoying\path\\'
0赞 grepit 11/28/2019 #13

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

1赞 Areeha 3/25/2020 #14

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

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

    '''Parameters:
    ...Type something.....
    .....finishing statement'''
1赞 Md.Rakibuz Sultan 4/23/2020 #15

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

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

enter image description here

上图显示了错误和已解决的输出。

2赞 Ignoramus Philomathum 12/10/2020 #16

以下所有代码均使用 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 \
............"
4赞 shoaib21 1/4/2021 #17

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

0赞 Bangash Owais 4/23/2023 #18

当代码中定义字符串的方式存在问题时,会出现错误“SyntaxError: EOL while scanning string literal”。错误消息指示在正确关闭字符串之前已到达字符串的末尾。 注意:确保使用反斜杠字符 () 正确转义文件路径

0赞 Arpan Saini 8/31/2023 #19

在窗口路径的末尾使用 \,它会正常工作,如下所示

basePath = r'C:\Users\asaini2\OneDrive - Discover\arpan\Principal Data Science\git-project-config\\'
0赞 Nick 11/17/2023 #20

我收到此消息,看不到字符串(在 IDLE windows python3.8 中):

哎呀,代码中有一个虚假的额外引号 这导致 pr0blem 出现在看起来像未引用的文本中