遍历字典列表时循环失效,无法处理HuggingFace模型训练图像
问题修复方案
核心错误点
- 字符串引号嵌套冲突:print语句中外层用双引号,内层访问
dataset["image_data"]也用双引号,导致Python语法解析错误,这是触发error found: image_data的直接原因。 - 无效遍历逻辑:遍历字典所有key的列表,包括空列表(如
label_path、image_data),既浪费资源又容易引入无关问题。 - 路径转义异常:Windows路径中的
\未转义,会被解析为转义字符(如\t变成制表符),导致实际路径错误,无法找到图片文件。
修复步骤
- 修正print语句的引号:将内层双引号改为单引号,或外层用单引号内层用双引号,也可转义双引号。
- 直接遍历
dataset["image_path"]列表:无需遍历整个字典的所有key,聚焦目标数据。 - 修正路径格式:将路径改为原始字符串(前缀加
r)或转义反斜杠,确保路径被正确解析。
修正后的代码
def images_to_tensor(): """ Convert images data to pytorch tensor by converting them to RGB values and then tensors using model processor. Parameters: None Returns: None """ processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base") try: # 直接遍历目标路径列表,跳过无效遍历 for img_path in dataset["image_path"]: with open(img_path, "rb") as file: image_rgb = Image.open(file).convert("RGB") image_tensor = processor(images=image_rgb, return_tensors="pt").pixel_values.squeeze(0) dataset["image_data"].append(image_tensor) # 修正引号冲突,用单引号包裹内层键名 print(f"dataset length image_data : {len(dataset['image_data'])}") except Exception as e: # 打印完整错误栈,方便排查深层问题 import traceback traceback.print_exc() print(f"error found: {str(e)}") return None # 修正路径格式的字典示例 dataset = { "image_path": [r".\my\path\to.jpeg", r".\my\path\to2.jpeg"], # 加r使用原始字符串避免转义 "label_path": [], "image_data": [], "label_data": [] }
额外排查建议
- 添加调试打印(如
print(f"Processing path: {img_path}")),确认是否正确遍历到目标路径。 - 用
os.path.exists(img_path)验证路径是否实际存在,排除文件不存在的问题。
内容的提问来源于stack exchange,提问作者Max Mougg
相关产品推荐
相关产品推荐

