2017-04-23 64 views
0

当我尝试编辑功能(在我的例子printval)错误,IPython的 - %编辑<functionname>抛出使用命令中Enthought篷IPython的定义时记事本打开

%edit printval

我弹出一个在后台打开的记事本弹出以下错误消息。我点击弹出消息后

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

记事本是空白。这个错误发生在Windows Ipython中。

我也援引IPython中使用下面的命令

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

谁能帮助找到什么都可以的问题。

回答

1

适合我。当你给出命令%edit printval时,你确定函数名printval已经在你的ipython命名空间吗?您可以通过查看printval?是否按预期将您的功能引用到您的功能,或者是否发生错误来检查。如果printval不在您的ipython命名空间中,那么ipython无法知道您的意思是printval

例如,如果你已经做了from mymodule import printval

然后%edit printval应该工作。

如果这不能解决问题,请提供一个最简单的示例,其中包括所有重现问题的步骤。从用户这个随访信息后


UPDATE:“File: c:\users\tester\<ipython-input-5-cc5d372a3507>

这表明函数没有因为通常做了文件中定义的,而是互动的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中,错误消息更加明确。它说“InteractivelyDefined”至少给出了一个提示,即你正在编辑的功能是交互式定义的,因此不能直接编辑。

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

+0

当我执行你说的命令,'%编辑printval' 我得到以下信息,这意味着它在命名空间 可用'类型:功能 字符串形式: 文件<在0x00000000050195F8功能printval>: c:\ users \ tester \ 定义:printval() Docstring:'我认为这与Enthought Canopy的设置有关 –

+0

我打开了Canopy Command Prompt并输入'ipython'并定义了下面的函数'def printval():print'hello''。当我使用下面的命令'%edit printval'时,我得到以下错误信息:'editing ...命令的语法不正确。警告:无法打开编辑器。 Ipython版本为0.13.1,Python版本为2.7.3 –

+0

“Ipython版本为0.13.1,Python版本为2.7.3”如果这实际上是Canopy命令提示符,那么它是一个非常(> 3年) Canopy版本,或者被另一个非常老的Python安装阻止。要将Canopy更新到最新版本,请参阅[本文](https://support.enthought.com/entries/61798124-Canopy-shows-no-updates-available-reinstalling-from-the-website)。 –

相关问题