2017-04-23 39 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)。 –

相關問題