Python自定义load_db函数读取codedata.pkl报FileNotFoundError如何解决
问题排查及解决方案
你遇到的FileNotFoundError报错核心原因是Python运行时的工作目录下不存在你指定的codedata.pkl文件,具体排查方案如下:
FileNotFoundError: [Errno 2] No such file or directory: 'codedata.pkl'
- 首先确认
codedata.pkl文件的实际存储位置,检查文件名、后缀名拼写是否完全正确,Linux、macOS系统下需注意文件名大小写敏感 - 可以先执行以下代码打印当前Python的工作目录,将
codedata.pkl放到打印出的目录下即可解决路径找不到问题:
import os print(os.getcwd())
- 如果你希望固定读取和当前代码文件同目录下的
codedata.pkl,可以改用绝对路径拼接逻辑,避免不同运行环境下工作目录变化导致的路径错误。
除了路径问题外,你的代码还存在两处可优化/修复点:
pickle.loads()方法用于读取字节类型的序列化数据,读取文件对象需要使用pickle.load(),否则路径正确后也会触发类型错误- 建议使用
with上下文管理器操作文件,无需手动调用close(),可以避免异常场景下文件资源泄漏的问题
修复后的完整代码如下:
import os import pickle def load_db(): """ load data base properly And get ready for later use Return: ------- cd : (list) list of tuples """ # 拼接当前脚本所在目录和pkl文件名,得到绝对路径 current_script_dir = os.path.dirname(os.path.abspath(__file__)) pkl_file_path = os.path.join(current_script_dir, 'codedata.pkl') with open(pkl_file_path, 'rb') as f: codedata = pickle.load(f) return codedata
内容的提问来源于stack exchange,提问作者yannis van achter
相关产品推荐
相关产品推荐

