226

I have the above-mentioned error in s1="some very long string............"

Does anyone know what I am doing wrong?

4
  • 3
    Are you sure it's being closed correctly and there aren't unescaped quotes somewhere? Commented Aug 24, 2010 at 23:08
  • 1
    Unescaped quotes throw another parsing error. Commented Aug 24, 2010 at 23:38
  • Note that since Python 3.10, the error message will look a bit different. Commented May 26, 2022 at 16:46
  • Does the actual string end with a backslash? Something as simple as "\" will cause that error. Commented Jun 30, 2023 at 23:11

21 Answers 21

294

You are not putting a " before the end of the line.

Use """ if you want to do this:

""" a very long string ...... 
....that can span multiple lines
"""
Sign up to request clarification or add additional context in comments.

1 Comment

And careful to only use three quotation marks, I had four by accident and the error came up
123

I had this problem - I eventually worked out that the reason was that I'd included \ characters in the string. If you have any of these, "escape" them with \\ and it should work fine.

3 Comments

@Leo they are called 'escape characters', and this is pretty standard. You can put an r before the string to avoid them causing problems.
@eric you can do that if the \ is not at the very end of the string like r'the cat in the hat\'. I wish this wasn't the case, but it is
@scrollout good point I really wish they would fix that. It almost defeats the purpose.
19

(Assuming you don't have/want line breaks in your string...)

How long is this string really?

I suspect there is a limit to how long a line read from a file or from the commandline can be, and because the end of the line gets choped off the parser sees something like s1="some very long string.......... (without an ending ") and thus throws a parsing error?

You can split long lines up in multiple lines by escaping linebreaks in your source like this:

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

Comments

13

I faced a similar problem. I had a string which contained path to a folder in Windows e.g. C:\Users\ The problem is that \ is an escape character and so in order to use it in strings you need to add one more \.

Incorrect: C:\Users\

Correct: C:\\Users\\

2 Comments

I have the same problem but this doesn't solve the issue. Putting additional 2 slashes makes first of them escape for the second one. And the last slash still causes problem.
@I.P. that appears to have been a typo in the post; it should be fixed now. However, see also Windows path in Python.
12

In my situation, I had \r\n in my single-quoted dictionary strings. I replaced all instances of \r with \\r and \n with \\n and it fixed my issue, properly returning escaped line breaks in the eval'ed dict.

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

1 Comment

I passed over this answer at first because it focused on the \r\n. The real issue here is ast.literal_eval which raises this error whenever it doesn't get a valid python literal. In my case I broke it with something like ast.literal_eval('{"my": "dict"}"}').
9

You can try this:

s = r'long\annoying\path'

1 Comment

That is the best answer. Can also try s = r'long\annoying\path\\'.
5

I too had this problem, though there were answers here I want to an important point to this after / there should not be empty spaces.Be Aware of it

Comments

4

I also had this exact error message, for me the problem was fixed by adding an " \"

It turns out that my long string, broken into about eight lines with " \" at the very end, was missing a " \" on one line.

Python IDLE didn't specify a line number that this error was on, but it red-highlighted a totally correct variable assignment statement, throwing me off. The actual misshapen string statement (multiple lines long with " \") was adjacent to the statement being highlighted. Maybe this will help someone else.

Comments

4

In my case, I use Windows so I have to use double quotes instead of single.

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

Comments

4

In my case with Mac OS X, I had the following statement:

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

I was getting the error:

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

After I change to:

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

It worked...

David

Comments

4

In my case, I forgot (' or ") at the end of string. E.g 'ABC' or "ABC"

Comments

3

I was getting this error in postgresql function. I had a long SQL which I broke into multiple lines with \ for better readability. However, that was the problem. I removed all and made them in one line to fix the issue. I was using pgadmin III.

Comments

2

Your variable(s1) spans multiple lines. In order to do this (i.e you want your string to span multiple lines), you have to use triple quotes(""").

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

Comments

2

All code below was tested with Python 3.8.3


Simplest -- just use triple quotes.
Either single:

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

or double:

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

Note: triple quoted strings retain indentation, it means that

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

and

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

or even just

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

are not the same.
There is a textwrap.dedent function in standard library to deal with this, though working with it is out of question's scope.


You can, as well, use \n inside a string, residing on single line:

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

Also, if you don't need any linefeeds (i.e. newlines) in your string, you can use \ inside regular string:

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

Comments

1

In this case, three single quotations or three double quotations both will work! For example:

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

OR

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

Comments

1

I had faced the same problem while accessing any hard drive directory. Then I solved it in this way.

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

enter image description here

The picture above shows an error and resolved output.

Comments

0

Most previous answers are correct and my answer is very similar to aaronasterling, you could also do 3 single quotations s1='''some very long string............'''

Comments

0

The error "SyntaxError: EOL while scanning string literal" occurs when there is an issue with the way a string is defined in the code. The error message indicates that the end of the string was reached before the string was closed properly. Note: make sure that the file paths are properly escaped using the backslash character ()

Comments

0

use \ in the end of window path, and it will work just fine, as shown below

basePath = r'C:\Users\asaini2\OneDrive - Discover\arpan\Principal Data Science\git-project-config\\'

Comments

0

I'm getting this message with no string in sight (in IDLE windows python3.8):

oops there was a spurious extra quote mark way back in the code which was causing the pr0blem to show up in what looked like unquoted text

Comments

0

In my situation...

Python threw this error during an anomaly with Postgres. All variables were present in the concatenated string, so this error was NOT due to an issue in Python at all. There was a race condition with Postgres because there was a SQL query one line before this line this SQL query (with this concatenated string). The first SQL query had failed due to a missing variable it needed but the Python code returned okay (but not Postgres), but the Postgres connection got lost or interrupted. Therefore, the second Postgres SQL query (the code below) couldn't run.

SyntaxError('EOL while scanning string literal', ('<string>', 1, 184, '"select table_name from information_schema.tables WHERE table_name LIKE \'" + table_prefix + "_%\' AND table_schema = \'" + schema + "\' and table_type = \'BASE TABLE\''))

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.