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

时间:2010-08-24 23:04:27

标签: python string string-literals

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

中遇到了上述错误

有谁知道我做错了什么?

17 个答案:

答案 0 :(得分:165)

你没有在行结束前加"

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

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

答案 1 :(得分:68)

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

答案 2 :(得分:16)

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

这个字符串真的有多长?

我怀疑从文件或命令行读取一行的时间有限,并且因为该行的结尾被解析,所以解析器会看到类似s1="some very long string..........的内容(没有结尾{ {1}})因此抛出解析错误?

您可以通过在源代码中转义换行符来分割多行中的长行:

"

答案 3 :(得分:7)

在我的情况下,我的单引号词典字符串中有\r\n。我将\r的所有实例替换为\\r,将\n替换为\\n,并修复了我的问题,正确地返回了eval'ed字典中的转义换行符。

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

答案 4 :(得分:4)

我也遇到过这个问题,虽然这里有答案我想对此提出重要意见 后 /不应该有空的空间。意识到它

答案 5 :(得分:3)

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

不正确:C:\Users\

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

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

答案 8 :(得分:2)

在我的情况下,我使用Windows,所以我必须使用双引号而不是单引号。

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

答案 9 :(得分:2)

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

来解决的

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

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

答案 10 :(得分:1)

对于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 :(得分:1)

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

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

答案 12 :(得分:1)

您可以尝试以下方法:

s = r'long\annoying\path'

答案 13 :(得分:1)

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

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

OR

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

static_cast

enter image description here

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

答案 16 :(得分:0)

下面的所有代码均已使用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 \
............"