Jupyter Notebook中修改py文件函数后调用报参数数量错误如何解决
问题成因
该问题是Jupyter Notebook的模块缓存机制导致的:你第一次导入func模块时,Jupyter会将该模块的内容缓存到内存中,后续你修改func.py的代码后,再次导入func时Jupyter默认会直接读取缓存的旧版本模块,而不会加载你修改后的新版本。你修改前的lineplot函数确实只有3个参数,所以即使你后续修改了func.py的代码,实际运行时调用的还是旧版函数,才会报参数数量不匹配的错误。
解决方法
有三种常用的解决方案,你可以根据需求选择:
- 方案1:重启内核(临时生效,操作简单)
在Jupyter界面顶部点击「Kernel」→「Restart」,重启内核后重新运行所有代码,此时会加载最新的func.py内容,参数就会匹配。缺点是重启后之前运行得到的所有变量都会被清空。 - 方案2:手动重载模块(无需重启,适合偶尔修改模块的场景)
调用importlib.reload手动刷新模块缓存,修改你的main.ipynb代码如下即可:import func as f import importlib importlib.reload(f) # 每次修改func.py后运行这句就能加载最新代码 f.lineplot(x,y,clip,lo,la) - 方案3:开启自动重载魔法命令(一劳永逸,适合频繁调试自定义模块的场景)
在main.ipynb的最开头运行两行魔法命令,之后你修改任何导入的.py文件,Jupyter都会自动重载最新版本,不需要手动操作也不需要重启内核:%load_ext autoreload %autoreload 2 import func as f f.lineplot(x,y,clip,lo,la)
内容的提问来源于stack exchange,提问作者janet
相关产品推荐
相关产品推荐

