← 中文资源

简体中文版本

Python 报 FileNotFoundError,但路径其实存在

通过确认工作目录来解决 FileNotFoundError,因为相对路径依赖进程启动位置。

阅读英文原文

症状

脚本对在 shell 中明明存在的路径抛出 FileNotFoundError。开发时脚本从项目目录启动,相对路径恰好可用。生产环境里服务管理器或容器可能从不同工作目录启动进程,于是同一相对字符串解析到别的绝对位置,打开失败。

诊断

打印 os.getcwd() 与 os.path.abspath 后的路径,确认真实解析位置;用 ls 核对绝对路径是否存在;检查 systemd 的 WorkingDirectory 配置。

python -c "import os; print(os.getcwd()); print(os.path.abspath('data/x.csv'))"

根因

路径字符串是相对的,操作系统按进程工作目录解析。当该目录与文件所在目录不同时,即便文件确实存在,打开也会失败。

修复

把路径锚定到稳定基准:由文件位置或配置的绝对根目录派生,或在服务定义中显式设置工作目录。写入前先创建运行时目录,避免依赖 shell 处于某个特定目录。

验证

重跑确认文件可打开,并打印解析后的绝对路径确认其指向预期位置。路径正确比单次成功更有说服力。

常见陷阱

用 os.chdir 到处切换工作目录会让行为难以预测;优先使用绝对路径或明确的基准目录。