PIL 9.1.1调用image.save()保存图片时触发FileNotFoundError报错
问题修复方案
这个报错是PIL调用系统写入接口创建目标文件时触发的,和PIL图像保存逻辑本身无关,按以下优先级排查即可:
- 最常见原因:相对路径解析基准和你预期不一致
代码里写的相对路径output.png,是按Python进程启动时的工作目录解析,不是按脚本文件存放的目录解析。很多IDE默认的运行工作目录和脚本所在目录不一致,若工作目录不存在或当前账号无写入权限,就会触发该报错。
先执行以下代码打印当前实际工作目录验证:
如果输出路径不是你脚本存放的import os print(os.getcwd())C:\Users\Francesco\Documents\coding\python,要么修改IDE的运行配置把工作目录切到脚本所在文件夹,要么直接基于脚本路径拼接绝对路径保存,完全绕开工作目录的影响:from PIL import Image import os # 获取当前脚本所在的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) save_path = os.path.join(script_dir, 'output.png') im = Image.new('RGB', (1, 1), (0, 0, 0)) im.save(save_path, 'PNG') - 手动写绝对路径时报错的核心原因:Python写入文件时不会自动创建不存在的父目录。比如你指定保存路径为
C:\dev\imgs\output.png,必须提前手动建好C:\dev\imgs这层文件夹,否则同样会触发FileNotFoundError。 - 系统权限拦截:Windows系统如果开启了Defender的「受控文件夹访问」(勒索软件防护功能),会默认拦截未授权程序往文档、桌面、图片等用户受保护目录写入文件,可以把Python解释器加入功能允许列表,或者把文件存到非系统受保护的自建目录测试。注意不要尝试往C盘根目录、Program Files目录这类需要管理员权限的路径存文件,普通用户账号默认无写入权限。
- 隐式命名冲突:你当前的脚本文件名为
image.py,和PIL依赖的内部模块同名,可能触发隐式导入异常。建议把脚本重命名为mandelbrot_render.py这类不和第三方库模块重名的名称,同时删除脚本目录下的__pycache__缓存文件夹后再运行。
内容的提问来源于stack exchange,提问作者Francesco 'oH pongwIj'e'
相关产品推荐
相关产品推荐

