Ipython - %edit <functionname > 打开记事本时抛出错误
Ipython - %edit <functionname > throws error when notepad is opened
当我尝试使用命令编辑 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
谁能帮忙找出问题所在。
适合我。当您发出命令 %edit printval
时,您确定函数名称 printval
已经在您的 ipython 命名空间中了吗?您可以通过查看 printval?
是否按预期引用您的函数或给出错误来检查这一点。如果 printval
不在您的 ipython 命名空间中,那么 ipython 无法知道您所说的 printval
.
是什么意思
例如,如果您已经完成 from mymodule import printval
,
那么 %edit printval
应该可以。
如果这不能解决问题,请提供一个最小示例,包括重现问题的所有步骤。
更新来自用户的后续信息:“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 notebook 和 jupyter lab 项目上。
因为 Canopy 是一个 GUI 应用程序,Canopy 的 ipython 提示符是一个 QtConsole,而不是 ipython 终端提示符。因此 Canopy 不会实现您想要的行为,并且在可预见的未来也不会。
(小)好消息是,在最新版本的 QtConsole 中,错误消息更加明确。它说 "InteractivelyDefined" 这至少暗示您正在编辑的函数是交互式定义的,因此不能直接编辑。
当然,解决方法是将函数定义源代码手动复制粘贴到 Canopy 编辑器中(它会自动从剪贴板中删除 ipython 提示,这非常简单),在那里编辑函数,运行那个文件。
当我尝试使用命令编辑 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
谁能帮忙找出问题所在。
适合我。当您发出命令 %edit printval
时,您确定函数名称 printval
已经在您的 ipython 命名空间中了吗?您可以通过查看 printval?
是否按预期引用您的函数或给出错误来检查这一点。如果 printval
不在您的 ipython 命名空间中,那么 ipython 无法知道您所说的 printval
.
例如,如果您已经完成 from mymodule import printval
,
那么 %edit printval
应该可以。
如果这不能解决问题,请提供一个最小示例,包括重现问题的所有步骤。
更新来自用户的后续信息:“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 notebook 和 jupyter lab 项目上。
因为 Canopy 是一个 GUI 应用程序,Canopy 的 ipython 提示符是一个 QtConsole,而不是 ipython 终端提示符。因此 Canopy 不会实现您想要的行为,并且在可预见的未来也不会。
(小)好消息是,在最新版本的 QtConsole 中,错误消息更加明确。它说 "InteractivelyDefined" 这至少暗示您正在编辑的函数是交互式定义的,因此不能直接编辑。
当然,解决方法是将函数定义源代码手动复制粘贴到 Canopy 编辑器中(它会自动从剪贴板中删除 ipython 提示,这非常简单),在那里编辑函数,运行那个文件。