Alex Gordon
Alex Gordon

Reputation: 60691

Python: SyntaxError: EOL while scanning string literal

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

Does anyone know what I am doing wrong?

Upvotes: 224

Views: 1295833

Answers (21)

JustBeingHelpful
JustBeingHelpful

Reputation: 18980

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\''))

Upvotes: 0

Nick
Nick

Reputation: 145

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

Upvotes: 0

Arpan Saini
Arpan Saini

Reputation: 5181

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\\'

Upvotes: 0

Ben
Ben

Reputation: 61

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 ()

Upvotes: 0

Ashish kulkarni
Ashish kulkarni

Reputation: 654

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\\

Upvotes: 13

shoaib21
shoaib21

Reputation: 505

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

Upvotes: 4

Ignoramus Philomathum
Ignoramus Philomathum

Reputation: 139

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 \
............"

Upvotes: 2

Md.Rakibuz Sultan
Md.Rakibuz Sultan

Reputation: 919

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.

Upvotes: 1

Areeha
Areeha

Reputation: 833

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'''

Upvotes: 1

grepit
grepit

Reputation: 22382

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............'''

Upvotes: 0

ZakS
ZakS

Reputation: 1131

You can try this:

s = r'long\annoying\path'

Upvotes: 9

Khandelwal-manik
Khandelwal-manik

Reputation: 373

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............"""

Upvotes: 2

us_david
us_david

Reputation: 4917

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

Upvotes: 4

Ram Dwivedi
Ram Dwivedi

Reputation: 470

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.

Upvotes: 3

nicbou
nicbou

Reputation: 1056

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'))
  .....

Upvotes: 12

aaronasterling
aaronasterling

Reputation: 70994

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
"""

Upvotes: 294

Aminah Nuraini
Aminah Nuraini

Reputation: 19146

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

Upvotes: 4

Chris H
Chris H

Reputation: 1241

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.

Upvotes: 124

madhu131313
madhu131313

Reputation: 7386

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

Upvotes: 5

user12711
user12711

Reputation: 713

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.

Upvotes: 4

JanC
JanC

Reputation: 1264

(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.....\
...\
...."

Upvotes: 19

Related Questions