Ipython - %edit <functionname>在打开记事本时抛出错误

时间:2017-04-23 04:31:03

标签: python ipython enthought

当我尝试使用命令编辑在Enthought canopy Ipython中定义的函数(在我的示例中为printval)时,

%edit printval

我在后台打开记事本的弹出窗口中收到以下错误消息。

The filename,directory name ,or volume label syntax is incorrect.

单击弹出消息后,记事本为空白。这个错误发生在Windows Ipython中。

我也使用以下命令调用Ipython

ipython qtconsole --pylab=inline --colors=Linux

任何人都可以帮忙找到可能存在的问题。

1 个答案:

答案 0 :(得分:1)

适合我。当您提供命令printval时,您确定函数名%edit printval已经在您的ipython名称空间中吗?您可以通过查看printval?是否按预期引用您的函数来检查这一点,或者给出错误。如果您的ipython名称空间中没有printval,那么ipython无法知道printval的含义。

例如,如果您已完成from mymodule import printval

然后%edit printval应该有用。

如果这不能解决问题,请提供一个最小的例子,包括重现问题的所有步骤。

在用户提供此后续信息后更新:&#34; File: c:\users\tester\<ipython-input-5-cc5d372a3507>&#34;

这表明函数没有像通常那样在文件中定义,而是在ipython提示符下以交互方式定义。这使答案变得复杂,因此:

当在(非临时)文件中定义函数时,%edit functionname在所有版本的ipython中按需运行 - 它会打开该文件进行编辑。

但是,当在ipython提示符下以交互方式定义函数时,就像在这个用户的情况下一样,那么实际行为取决于ipython的版本以及您正在使用的ipython / jupyter接口。想要打开临时文件,将函数定义复制到该文件进行编辑,然后在编辑器关闭后,重新执行函数定义(即重新定义函数) )基于那些编辑。

实际上,这种期望的行为是在简单的文本模式ipython终端中实现的(例如,如果您在Canopy命令提示符下键入ipython)。

但是,在ipython / jupyter QtConsole中从未实现过这种期望的行为(例如,如果你在Canopy命令提示符下键入jupyter qtconsole),据我所知,jupyter目前没有计划团队,其中大部分努力似乎都集中在jupyter笔记本和jupyter实验室项目上。

因为Canopy是一个GUI应用程序,所以Canopy的ipython提示符是QtConsole,而不是ipython终端提示符。因此,Canopy不会实现您想要的行为,并且在可预见的将来也不会。

(次要)好消息是,在最新版本的QtConsole中,错误消息更明确。它说&#34; InteractivelyDefined&#34;至少提示您正在编辑的功能是以交互方式定义的,因此无法直接编辑。

当然,解决方法是手动将函数定义源代码复制粘贴到Canopy编辑器中(它会自动从剪贴板中删除ipython提示,这使得这非常简单),在那里编辑函数,以及运行该文件。