25

I'm in Python 3.3 and I'm only entering these 3 lines:

import sklearn as sk
import numpy as np
import matplotlib.pyplot as plt

I'm getting this error:

SyntaxError: multiple statements found while compiling a single statement

What could I be doing wrong?

Screenshot:

screenshot

mkrieger1
  • 19,194
  • 5
  • 54
  • 65
user3213857
  • 369
  • 1
  • 3
  • 6

6 Answers6

59

I had the same problem. This worked for me on mac (and linux):

echo "set enable-bracketed-paste off" >> ~/.inputrc
iman
  • 21,202
  • 8
  • 32
  • 31
Adnan Boz
  • 744
  • 5
  • 4
21

In the shell, you can't execute more than one statement at a time:

>>> x = 5
y = 6
SyntaxError: multiple statements found while compiling a single statement

You need to execute them one by one:

>>> x = 5
>>> y = 6
>>>

When you see multiple statements are being declared, that means you're seeing a script, which will be executed later. But in the interactive interpreter, you can't do more than one statement at a time.

aIKid
  • 26,968
  • 4
  • 39
  • 65
  • 1
    This is not true, you can just paste in `x=6 \n x=6` and it will work just fine. Its impossible to say without a full traceback, and I think the actual answer is more towards jmu's – Games Brainiac Jan 20 '14 at 05:47
  • @GamesBrainiac Hum.. Really? I pasted your snippet and i got `SyntaxError: unexpected character after line continuation character`.. – aIKid Jan 20 '14 at 05:49
  • I pasted his code into the console, and got no error whatsoever. – Games Brainiac Jan 20 '14 at 05:50
  • @Games What are you using? I pasted it and i got exactly the same error with the one in my answer. – aIKid Jan 20 '14 at 05:51
  • I believe GB means `\n` as in an actual newline. aIKid, are you pasting a literal backslash and n? – user2357112 Jan 20 '14 at 05:53
  • 1
    @user2357112 Ah, yeah, i did. But using an actual newline just got me the same error as in my answer. – aIKid Jan 20 '14 at 05:54
  • Let's just continue in chat, meanwhile i'll delete this answer. – aIKid Jan 20 '14 at 05:55
  • @GamesBrainiac You're still here? – aIKid Jan 20 '14 at 05:58
  • @aIKid mmhmm. I think we need to see a full traceback before we can actually give a definitive answer. – Games Brainiac Jan 20 '14 at 05:59
  • @GamesBrainiac Yeah, sure, but can you join me in chat? – aIKid Jan 20 '14 at 06:00
  • @GamesBrainiac False. Using the shell you cannot enter multiple statements using Enter or \n. You can enter multiple statements by separating the statements using semicolon, as in `x = 5; y = 6` . You need to go into script mode. – john Jun 13 '20 at 13:11
7

A (partial) practical work-around is to put things into a throw-away function.

Pasting

x = 1
x += 1
print(x)

results in

>>> x = 1
x += 1
print(x)
  File "<stdin>", line 1
    x += 1
print(x)

    ^
SyntaxError: multiple statements found while compiling a single statement
>>>

However, pasting

def abc():
  x = 1
  x += 1
  print(x)

works:

>>> def abc():
  x = 1
  x += 1
  print(x)
>>> abc()
2
>>>

Of course, this is OK for a quick one-off, won't work for everything you might want to do, etc. But then, going to ipython / jupyter qtconsole is probably the next simplest option.

Evgeni Sergeev
  • 22,495
  • 17
  • 107
  • 124
2

You are using the interactive shell which allows on line at a time. What you can do is put a semi-colon between every line, like this - import sklearn as sk;import numpy as np;import matplotlib.pyplot as plt. Or you can create a new file by control+n where you will get the normal idle. Don't forget to save that file before running. To save - control+s. And then run it from the above menu bar - run > run module.

Jason
  • 87
  • 8
1

Long-term solution is to just use another GUI for running Python e.g. IDLE or M-x run-python in Emacs.

Christabella Irwanto
  • 1,161
  • 11
  • 15
1

The solution I found was to download Idlex and use its IDLE version, which allows multiple lines.


This was originally added to Revision 4 of the question.

mkrieger1
  • 19,194
  • 5
  • 54
  • 65