VS Code调试Python报FileNotFoundError找不到本地文件问题咨询
Python的相对路径完全基于进程启动时的工作目录(cwd)解析,和脚本本身的存储位置无关。你配置cwd后仍报错,本质是VS Code当前打开的工作区根目录不是my_proyect,导致${workspaceFolder}变量拼接出的路径不符合预期,最终启动进程的工作目录没有落到my_code.py所在的my_folder层级。
你之前在Lambda里原写法能正常运行,是因为Lambda启动Python进程时的默认cwd就是代码包内my_code.py所在的目录,刚好匹配相对路径的解析逻辑。靠硬改cwd、硬写不同相对路径适配环境的方式鲁棒性极差,换启动目录、换部署环境就会再次报错。
不要依赖cwd解析相对路径,直接基于当前脚本的存储位置动态拼接目标文件的绝对路径,这种写法不受启动工作目录影响,两个环境都能正常运行,不需要为了适配环境反复改代码。
- os模块实现(兼容所有Python3版本)
替换原有读文件的代码即可:
import os import pandas as pd # 获取当前执行脚本my_code.py所在的目录绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接csv文件路径,和原有相对路径的目录逻辑完全一致 csv_file_path = os.path.join(script_dir, "data", "my_data.csv") my_data = pd.read_csv(csv_file_path)
- pathlib实现(Python3.4+支持,写法更简洁)
from pathlib import Path import pandas as pd csv_file_path = Path(__file__).parent / "data" / "my_data.csv" my_data = pd.read_csv(csv_file_path)
如果不想调整业务代码,先确认VS Code打开的工作区根目录是my_proyect文件夹(即资源管理器侧边栏直接能看到my_folder目录的层级),你当前launch.json里的cwd配置逻辑是正确的:工作区根为my_proyect时,${workspaceFolder}/my_folder会精准指向my_code.py所在目录,此时data/my_data.csv的相对路径可以正常解析。
如果不想调整工作区,也可以直接把cwd字段写为my_folder的本地绝对路径(比如/home/my_user/my_company/my_proyect/my_folder),但这种配置只对你本地设备有效,项目同步到其他设备后会失效,不推荐长期使用。
内容的提问来源于stack exchange,提问作者ambigus9

