Python3.5.5下Jupyter Lab重载模块触发NameError问题求助
解决Jupyter Lab中重载模块的NameError问题
嘿,我来帮你搞定这个头疼的问题!你遇到的NameError其实原因很简单:你只导入了myTest函数,没有把test模块本身导入到当前的命名空间里,所以importlib.reload(test)的时候,Python找不到test这个名称,自然就报错啦。
正确的操作步骤
我给你两种可行的方案,你可以根据自己的习惯选:
方案1:导入整个模块(推荐)
这种方法最直观,也不容易出错:
- 首先在Jupyter里导入整个
test模块:
import test
- 调用函数的时候通过模块名访问:
test.myTest() # 会输出 'hello'
- 当你修改了
test.py里的代码后,直接重载模块,然后再调用函数就会用新代码了:
import importlib importlib.reload(test) test.myTest() # 现在输出的就是修改后的内容啦
方案2:保留直接调用函数的方式
如果你还是想直接用myTest()而不是test.myTest(),那需要在重载模块后重新导入函数:
- 一开始可以正常导入函数:
from test import myTest myTest() # 输出初始的 'hello'
- 修改
test.py后,先导入test模块(这一步是关键,让test名称进入命名空间),然后重载,最后重新导入函数:
import test # 必须先导入模块本身 import importlib importlib.reload(test) from test import myTest # 重新导入更新后的函数 myTest() # 现在就能用修改后的代码了
为啥原来的代码会报错?
再补个小知识点:from test import myTest这种写法,只会把myTest这个函数名加到当前环境里,不会把test模块本身作为变量存下来。而importlib.reload()需要接收一个模块对象作为参数,所以你直接写reload(test)的时候,Python根本不知道test是什么,就抛出NameError了。
内容的提问来源于stack exchange,提问作者The Nightman
相关产品推荐
相关产品推荐

