通过SnakeViz运行脚本时抛出FileNotFoundError异常
问题表现
- IDE内直接运行Python脚本可正常执行,无报错
- 终端执行
python -m cProfile <script_file_name>命令分析同一份脚本时,触发FileNotFoundError异常
最小复现代码如下:
import pandas as pd x = pd.read_excel(<file_name>)
根因分析
报错核心是两种运行场景下的程序工作目录不统一:
- IDE运行脚本时,默认会将脚本文件所在的目录设置为程序工作目录,代码里写的相对路径可以正常匹配到同目录下的Excel文件
- 终端执行cProfile命令时,程序的工作目录是执行命令时终端所处的目录,如果这个目录不是脚本存放目录,相对路径解析后就找不到目标Excel文件,直接触发文件不存在的报错。
可行解决方案
- 临时解决:执行cProfile命令前,先通过
cd命令切换到脚本所在目录,再运行分析命令,保证工作目录和IDE运行时一致即可。 - 永久规避:不要在代码里直接写依赖工作目录的相对路径,改为基于脚本自身位置拼接文件绝对路径,不管在什么场景下运行脚本都能准确定位到目标文件。
基于os模块的实现:
Python 3.4+ 也可以用pathlib实现,写法更简洁:import os import pandas as pd # 获取当前脚本的绝对所在目录 current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接目标Excel文件的完整路径 target_excel_path = os.path.join(current_script_dir, <file_name>) x = pd.read_excel(target_excel_path)from pathlib import Path import pandas as pd current_script_dir = Path(__file__).resolve().parent target_excel_path = current_script_dir / <file_name> x = pd.read_excel(target_excel_path)
内容的提问来源于stack exchange,提问作者Ell
相关产品推荐
相关产品推荐

