101

我想将已经缩进的 Python 代码/整个函数和类复制到 IPython 中。每次我尝试缩进都搞砸了,我收到以下错误消息:

IndentationError: unindent does not match any outer indentation level (<ipython-input-23-354f8c8be51b>, line 12)

If you want to paste code into IPython, try the %paste and %cpaste magic functions.

4

6 回答 6

144

您不能直接复制到 IPython。这是步骤:

  1. 将要复制到 IPython 中的行复制到剪贴板
  2. 进入%pasteIPython
  3. 按回车
  4. 利润!
于 2012-06-04T19:16:04.293 回答
47

步骤说明:

  • 首先,将目标行复制到剪贴板中。

  • 在 iPython 提示符中输入:

    • 如果在 Tkinter 上:输入%paste
    • 否则:输入%cpaste
  • 粘贴 (Ctrl-V) 并按 Enter。

  • 然后输入--并回车。

例如:

In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:for l in "Hello World":
:    print l,
:--
H e l l o   W o r l d
于 2014-08-05T01:06:45.630 回答
25

Ipython 5 开始,您不需要任何魔法命令,只需粘贴即可

ipython5

感谢prompt_toolkitIPython现在支持:

  • 键入时突出显示语法
  • 真正的多行编辑(上下箭头键在行间移动)
  • 多行粘贴而不破坏缩进或立即执行代码
  • 更好的代码完成界面(我们计划进一步改进) 可选的鼠标支持

更多关于这里

升级ipython到最新版本

pip install ipython --upgrade 
于 2016-07-17T09:05:45.040 回答
6

%paste 需要Tkinter. 如果您在 ubuntu 中,则可以通过以下方式安装它

sudo apt-get install python-tk

如果你在 Python3

sudo apt-get install python3-tk

然后重新启动 ipython 并使用%paste从剪贴板粘贴。

于 2015-09-05T16:47:19.220 回答
2

评论中丢失了一个有用的答案,因此想重述它,并为另一个有用的 IPython 魔术函数添加参考。

首先重申@EOL所说的,解决OP问题的一种方法是通过首先运行并进行粘贴来关闭自动缩进%autoindent(当然,如果您正在使用,则不需要%paste)。

现在要向此处已有的内容添加更多信息,IPython 中另一种有用的模式是%doctest_mode允许您从文档字符串中复制粘贴示例和测试片段。这对于执行您可以在文档和在线论坛中找到的交互式 python 会话输出也很有用,而无需先删除提示字符串。

于 2016-02-22T08:26:30.223 回答
1

对于使用 Python 3 的 ubuntu 用户。

适用于python-tkPython 2。

%paste在 Python 3 上运行,请安装python3-tk包:

sudo apt-get install python3-tk
于 2017-01-26T06:14:22.053 回答