You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3.5.5下Jupyter Lab重载模块触发NameError问题求助

解决Jupyter Lab中重载模块的NameError问题

嘿,我来帮你搞定这个头疼的问题!你遇到的NameError其实原因很简单:你只导入了myTest函数,没有把test模块本身导入到当前的命名空间里,所以importlib.reload(test)的时候,Python找不到test这个名称,自然就报错啦。

正确的操作步骤

我给你两种可行的方案,你可以根据自己的习惯选:

方案1:导入整个模块(推荐)

这种方法最直观,也不容易出错:

  1. 首先在Jupyter里导入整个test模块:
import test
  1. 调用函数的时候通过模块名访问:
test.myTest()  # 会输出 'hello'
  1. 当你修改了test.py里的代码后,直接重载模块,然后再调用函数就会用新代码了:
import importlib
importlib.reload(test)
test.myTest()  # 现在输出的就是修改后的内容啦

方案2:保留直接调用函数的方式

如果你还是想直接用myTest()而不是test.myTest(),那需要在重载模块后重新导入函数:

  1. 一开始可以正常导入函数:
from test import myTest
myTest()  # 输出初始的 'hello'
  1. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:08:49