【问题标题】:Emacs/Python - function expected an indented blockEmacs/Python - 函数需要一个缩进块
【发布时间】:2016-06-07 16:30:41
【问题描述】:

我切换到 Emacs。我在 Emacs 中使用 Elpy 作为 IDE。我的设置是并排的窗口,左侧是一个缓冲区(脚本),我在其中编写/编辑代码,然后使用Ctrl-Enter 将其发送到右侧的 IPython shell。当我输入函数时:

 import numpy as np
 import pandas as pd

 data = pd.read_csv('spx_index.csv')

 def convert(x):
     return x.ix[:, 1:].set_index(x.ix[:, 0])

进入脚本(4 个空格缩进)并按两次Ctrl-Enter 我得到:

>>> ...   File "<stdin>", line 2
    return x.ix[:, 1:].set_index(x.ix[:, 0]) 
         ^
IndentationError: expected an indented block

但是,当我复制函数并将其直接粘贴到 IPython shell 中时:

>>> def convert(x):
    return x.ix[:, 1:].set_index(x.ix[:, 0]) 
... ... 
>>> 

它工作并且功能被保存。

让函数直接从脚本运行到 shell 将是理想的。我无法想象必须将每个函数复制并粘贴到 shell 中。

【问题讨论】:

  • C-c C-c 工作正常吗?
  • 是的。这工作正常。当我这样做时,该功能被保存。这肯定解决了我的问题。有没有办法逐行进行?

标签: python function shell emacs elpy


【解决方案1】:

要发送整个缓冲区,您可以按 C-c C-c 。您可以使用 C-c C-r 发送整个区域,并且可以通过绑定以下函数来发送您所在的当前行。以下函数本质上是python-shell-send-buffer的副本

(defun python-shell-send-line (&optional send-main msg)
  "Send the entire line to inferior Python process.
When optional argument SEND-MAIN is non-nil, allow execution of
code inside blocks delimited by \"if __name__== \\='__main__\\=':\".
When called interactively SEND-MAIN defaults to nil, unless it's
called with prefix argument.  When optional argument MSG is
non-nil, forces display of a user-friendly message if there's no
process running; defaults to t when called interactively."
  (interactive (list current-prefix-arg t))
  (save-restriction
    (widen)
    (python-shell-send-region (line-beginning-position) (line-end-position) send-main msg)))

【讨论】:

    【解决方案2】:

    ;;这应该可以,但在您的 .emacs 文件中不行:

    (defun mp-add-python-keys ()
      (interactive)
      (local-set-key (kbd "C-c C-n") 'py-execute-line))
    (add-hook 'python-mode-hook 'mp-add-python-keys)
    

    【讨论】:

    • 因为你说这不起作用,我不确定这是试图回答这个问题还是一个新问题。如果您就自己的问题寻求帮助,最好发布一个新问题。
    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2016-06-24
    • 2023-03-18
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多