python: SyntaxError: EOL while scanning string literal
Question:
I have the above-mentioned error in s1="some very long string............"
Does anyone know what I am doing wrong?
Answers:
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
"""
(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.....
...
...."
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.
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.
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
In my situation, I had rn
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'))
.....
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\
In my case, I use Windows so I have to use double quotes instead of single.
C:UsersDr. Printer>python -mtimeit -s"a = 0"
100000000 loops, best of 3: 0.011 usec per loop
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.
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
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............"""
You can try this:
s = r'longannoyingpath'
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…………”’
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'''
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
............"
In my case, I forgot (‘ or ") at the end of string. E.g ‘ABC’ or "ABC"
I have the above-mentioned error in s1="some very long string............"
Does anyone know what I am doing wrong?
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
"""
(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.....
...
...."
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.
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.
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
In my situation, I had rn
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'))
.....
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\
In my case, I use Windows so I have to use double quotes instead of single.
C:UsersDr. Printer>python -mtimeit -s"a = 0"
100000000 loops, best of 3: 0.011 usec per loop
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.
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
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............"""
You can try this:
s = r'longannoyingpath'
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…………”’
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'''
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
............"
In my case, I forgot (‘ or ") at the end of string. E.g ‘ABC’ or "ABC"