我更改代码时ipython笔记本没有更新

Max*_*son 8 ipython ipython-notebook jupyter jupyter-notebook

所以,我使用ipython笔记本遇到了一个奇怪的问题而不知道该怎么做.通常,当我运行部分代码时,如果有错误,我会追溯它,修复它,然后重新运行代码.我做了类似的事情,但即使在对代码进行更改之后,看起来似乎没有任何变化!

这是一个例子......我正在使用Python 3.5,所以xrange已经消失了.这会导致抛出错误:

XXXX
     24     XXXX
     25     XXXX
---> 26     for t in xrange(0,len(data),1):
     27 
     28         XXXX

     NameError: name 'xrange' is not defined
Run Code Online (Sandbox Code Playgroud)

但在更改我的代码后(你可以在下面看到第26行的差异),会弹出同样的错误!

XXXX
     24     XXXX
     25     XXXX
---> 26     for t in range(0,len(data),1):
     27 
     28     XXX

     NameError: name 'xrange' is not defined
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况的任何想法?

小智 10

正如Thomas K所说,您可能正在对未导入的外部文件进行更改。对于这种情况,ipython notebook 中有一个非常有用的命令,称为autoreaload。使用自动重新加载,每当您修改外部文件时,您都不必再次导入它,因为扩展会为您处理它。有关更多信息,请检查:ipython autoreload


HLe*_*Leb 6

对我来说,这是由于以下原因之一

  • 原因一:导入的模块没有更新

解决方案:

import importlib
importlib.reload(your_module)
Run Code Online (Sandbox Code Playgroud)
  • 原因2:其他

解决办法:重启内核,对于jupyter notebook是这样的 在此处输入图片说明

  • “%aut​​oreload”方法对我不起作用,但使用“importlib”却可以。谢谢! (2认同)

R K*_*mar 6

每当将外部文件与 Ipython 一起使用时,请使用 autoreload。每次在 IPython 中执行任何代码之前,它都会重新加载外部文件。

在 IPython 的第一个单元格中添加它。

%load_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)