Python函数参数img触发UnboundLocalError问题求助
问题原因分析
一、UnboundLocalError错误的根源
你遇到的错误和img是函数入参无关,问题出在Python的变量作用域规则上:
- 只要函数内部存在对
img的赋值操作(哪怕是在某个条件分支里),Python就会将img标记为局部变量,不再把它当成传入的参数处理。 - 比如函数里写了类似这样的代码:
当def get_all_fd(image_id, img, label): if some_condition: img = img.transpose(...) # 这里对img赋值 print(img.shape) # 如果条件不满足,img局部变量未赋值,触发错误some_condition不成立时,img的局部变量从未被赋值,但后续代码又引用了它,就会抛出UnboundLocalError。
二、修改utils.py后重运行单元格无效的原因
Jupyter Notebook的内核有模块缓存机制:
- 第一次导入
utils模块时,Python会把模块代码加载到内存中缓存起来。 - 之后再执行导入语句,Python直接用内存里的缓存版本,不会重新读取磁盘上修改后的文件,所以你的修改不会生效。
- 除了重启内核,也可以用以下代码强制重新加载模块:
重新加载后再导入函数,修改就能生效了。import importlib importlib.reload(utils)
内容的提问来源于stack exchange,提问作者Kaushik Ravishankar
相关产品推荐
相关产品推荐

