调用tf.keras.preprocessing.image.load_img时报Errno13权限被拒绝错误
报错原因
这个PermissionError和系统访问权限没关系,核心是代码写错了,导致传入图片加载函数的路径是当前工作目录.,函数本来要打开图片文件读二进制内容,结果传进来个目录路径,自然触发报错。具体有两处错误:
- 变量名拼错:前面定义排序后文件列表的时候,变量名是
fnames(末尾带s),后面取第4个元素(索引3)的时候写成了fname[3],少打了个s。正常来说这里应该直接报NameError说fname没定义,但Spyder会保留之前运行过的变量,刚好之前残留的fname变量值就是'.',程序就把这个值当图片路径传进去了。 - 漏了导入语句:代码里用了
os.path.join、os.listdir,但开头根本没导入os模块,就算把变量名改对,跑生成文件列表那行也会先报错。
修复步骤
按顺序改完就能正常跑:
- 在最开头的导入部分补上os模块的导入:
import os
- 把取图片路径那行的变量名改对,和前面定义的列表名一致:
# 把原来错写的fname[3]改成fnames[3] img_path = fnames[3]
- 改完之后最好重启下Spyder的IPython内核,把之前残留的旧变量清掉,再从头跑整段代码,避免历史变量干扰结果。
小提示:后续遇到这类文件加载报错,第一时间先打印传入的路径值,确认路径是不是你要的目标文件,能少走很多弯路,别一上来就改文件夹权限。
内容的提问来源于stack exchange,提问作者Crackerslover
相关产品推荐
相关产品推荐

