Python代码报错:load_set返回NoneType导致len()调用失败
问题分析与解决思路
错误核心是load_set(filename)返回了None,导致后续调用len(train)抛出TypeError。以下是常见原因及排查方向:
文件路径不匹配:确认
Flickr_8k.trainImages.txt是否在当前代码的工作目录下。可以先执行以下代码查看当前路径:import os print(os.getcwd())如果文件不在当前目录,需使用完整绝对路径(如
'/Users/xxx/Image_Caption_Project/Flickr_8k.trainImages.txt')或相对路径(如'./data/Flickr_8k.trainImages.txt')。load_set函数存在逻辑缺陷:这个自定义函数未正确返回数据,常见情况包括:- 函数内部处理完文件内容后,没有添加
return语句返回结果; - 文件读取时发生异常(如权限不足、文件损坏),但函数未捕获异常,导致提前退出并返回
None; - 处理文件内容的逻辑错误,生成的结果为空且未返回有效列表,直接返回了
None。
- 函数内部处理完文件内容后,没有添加
目标文件内容异常:即使文件存在,若内容为空或格式不符合
load_set的处理逻辑,也可能导致函数无法生成有效列表。手动打开Flickr_8k.trainImages.txt,确认文件内包含6000行左右的图片文件名。
快速排查步骤
- 在
train = load_set(filename)后添加print(train),确认返回值确实为None; - 使用绝对路径替换相对路径,测试
load_set是否能正常读取文件; - 检查
load_set函数代码,确保存在正确的return语句,例如处理完文件后返回整理好的文件名列表; - 给
load_set添加异常捕获,避免意外返回None,示例:
def load_set(filename): try: with open(filename, 'r', encoding='utf-8') as f: lines = f.readlines() # 按需求处理每行内容,比如去除换行符 return [line.strip() for line in lines if line.strip()] except Exception as e: print(f"读取文件出错: {str(e)}") return []
内容的提问来源于stack exchange,提问作者Ron Weasley
相关产品推荐
相关产品推荐

