语法错误:编译单个语句时发现多个语句。

25
我在使用Python 3.3,只输入了以下三行代码:
import sklearn as sk
import numpy as np
import matplotlib.pyplot as plt

我遇到了这个错误:

SyntaxError:编译单个语句时找到多个语句

我可能做错了什么?

截图:

screenshot

7个回答

60

我曾经遇到过同样的问题。这个方法在我的 Mac(和 Linux)上起作用:

echo "set enable-bracketed-paste off" >> ~/.inputrc

1
对于 macOS,这是正确的答案。只需添加它并重新启动 Python 控制台,它现在将接受粘贴多行。 - scuac
1
在iterm上对我没有用。 - Merlin
请查看此自制问题以获取更多详细信息:https://github.com/Homebrew/homebrew-core/issues/68193 - beerbajay
3
我正在使用Ubuntu Linux,它对我也起作用了。谢谢! - Colin McGovern

22

在 shell 中,您无法一次执行多个语句:

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

您需要逐个执行它们:

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

当你看到多个声明被列出时,那意味着你正在看一个脚本,它将在以后执行。但在交互式解释器中,你一次只能执行一个语句。


1
这不是真的,你只需粘贴 x=6 \n x=6 就可以正常工作。如果没有完整的回溯信息,很难说清楚,我认为实际答案更接近 jmu 的看法。 - Games Brainiac
@Games 你在用什么?我复制粘贴了,但是得到的错误和我回答中的一模一样。 - aIKid
我认为GB代表“\n”,就像实际的换行符一样。aIKid,你是在粘贴一个字面上的反斜杠和n吗? - user2357112
1
@user2357112 噢,是的,我试过了。但是使用实际的换行符号却得到了与我的答案相同的错误。 - aIKid
我们在聊天中继续讨论吧,同时我会删除这个回答。 - aIKid
显示剩余6条评论

7

一个(部分的)实践解决方法是将东西放入一个可丢弃的函数中。

粘贴

x = 1
x += 1
print(x)

导致

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

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

然而,粘贴

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

工作:

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

当然,这对于快速一次性操作是可以的,但并不适用于你可能想要做的所有事情。因此,转到ipython/jupyter qtconsole可能是下一个最简单的选项。

2

您正在使用交互式shell,每次只能一行输入。您可以在每行之间加上分号,像这样- import sklearn as sk;import numpy as np;import matplotlib.pyplot as plt。或者您可以通过控制+N创建一个新文件,在那里您将获得正常的闲置状态。运行之前不要忘记保存该文件- 控制+S。然后从上面的菜单栏运行- 运行>运行模块。


1
我发现的解决方案是下载Idlex并使用其IDLE版本,该版本允许多行。
这最初是添加到问题的第4次修改中的。

1
长期解决方案是使用另一个GUI来运行Python,例如IDLE或Emacs中的。

0
我在Windows上通过WSL执行Python代码。 对我来说有效的方法是切换到Jupyter Notebook。可以通过pip install jupyter轻松获取,然后使用jupyter notebook部署。 它允许将多行粘贴到每个“单元格”中,还有更多功能: 使用Jupyter Notebook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接