调用os.listdir()时触发FileNotFoundError报错的问题咨询
报错根因
你遇到的FileNotFoundError: [Errno 2] No such file or directory: 'graph_state_list/scene1/'在代码第2行第一次调用os.listdir()时就触发了,和循环内部逻辑无关,核心原因分为两类:
- 相对路径基准错误:Python解析相对路径时,基准是当前进程的工作目录,不是你代码文件/Notebook文件的存放目录。如果你启动脚本/运行Notebook时的工作目录不是
graph_state_list文件夹的父目录,就会找不到对应路径。 - 路径实际不存在:要么文件夹名拼写错误(比如大小写不匹配、多字少字,Linux/macOS系统严格区分路径大小写),要么
scene1文件夹没有放在你预期的位置。
另外你写的try-except只包裹了for循环内部的代码,第2行的首次os.listdir()调用根本不在异常捕获范围内,所以出错会直接崩溃,不会走到你写的print逻辑里。
排查&解决步骤
- 第一步先确认当前工作目录,在代码最开头加两行打印校验:
import os print("当前Python工作目录:", os.getcwd())
运行后看输出的路径,是不是你预期中存放graph_state_list文件夹的目录,如果不是,要么切换终端/Notebook的工作目录到对应位置,要么改用绝对路径。
- 不要手动拼接路径斜杠,用
os.path.join()处理路径拼接,自动适配不同操作系统的分隔符规则,同时在访问路径前做存在性校验:
scene = 'scene1' base_path = os.path.join("graph_state_list", scene) # 打印路径的绝对位置,直接去文件管理器里核对有没有这个文件夹 print("目标路径绝对位置:", os.path.abspath(base_path)) if not os.path.isdir(base_path): raise ValueError(f"目标文件夹不存在,请核对路径:{os.path.abspath(base_path)}") folders = os.listdir(base_path)
- 如果要让路径永远相对于当前脚本文件所在位置,不依赖启动时的工作目录,可以用以下方式生成基准路径,从任意位置启动脚本都不会找错:
# 获取当前脚本文件所在的绝对目录 script_root = os.path.dirname(os.path.abspath(__file__)) base_path = os.path.join(script_root, "graph_state_list", scene)
如果是Jupyter环境没有__file__变量,可以先手动写死绝对路径跑通逻辑,再根据实际目录结构调整相对路径。
- 调整异常捕获范围,把外层的路径读取逻辑也放进try块里,避免外层出错直接崩溃。
- 额外提示:你代码里
program_discription_list变量名拼写错误(正确应为program_description_list),当前不影响运行,后续可以修正避免隐性bug。
内容的提问来源于stack exchange,提问作者Easter012
相关产品推荐
相关产品推荐

