Python+OpenCV出现'NoneType' object is not subscriptable错误求助
问题原因与解决方法
错误原因
报错TypeError: 'NoneType' object is not subscriptable的直接原因是**cv2.imread()返回了None**——也就是图片加载失败,此时对None执行切片操作img[13:40, 570:606],必然触发错误。
导致图片加载失败的常见场景:
- 路径拼接错误:手动用
+ "/" +拼接路径容易出错,比如文件夹路径末尾已有斜杠,会生成//的无效路径;或相对路径解析错误,程序找不到目标文件。 - 文件夹包含非图片文件:
os.listdir()会列出文件夹内所有文件(包括隐藏文件、文档等),cv2.imread无法识别这些非图片格式的文件,返回None。 - 文件权限不足:当前运行程序的用户没有读取目标图片的权限,导致加载失败。
- 文件名大小写问题:部分系统(如macOS/Linux)区分文件名大小写,若实际文件名是
IMG001.JPG,但代码中按小写后缀读取,也会加载失败。
解决方法
用
os.path.join()正确拼接路径
避免手动拼接的错误,改用系统自带的路径拼接方法,确保路径格式合规:import os import cv2 y = [] easyocr_test = "你的目标文件夹路径" for every_img in sorted(os.listdir(easyocr_test)): img_path = os.path.join(easyocr_test, every_img) img = cv2.imread(img_path) # 后续处理逻辑过滤非图片文件
在循环中判断文件后缀,只处理常见的图片格式:valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff') for every_img in sorted(os.listdir(easyocr_test)): if every_img.lower().endswith(valid_extensions): img_path = os.path.join(easyocr_test, every_img) img = cv2.imread(img_path) # 后续处理逻辑增加加载校验
在切片前检查img是否为None,避免报错同时定位问题文件:y = [] easyocr_test = "你的目标文件夹路径" valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp') for every_img in sorted(os.listdir(easyocr_test)): if every_img.lower().endswith(valid_extensions): img_path = os.path.join(easyocr_test, every_img) img = cv2.imread(img_path) if img is not None: left_image = img[13:40, 570:606] y.append(left_image) else: print(f"加载失败,跳过文件: {img_path}")检查权限与文件名
- 确保运行程序的用户对
easyocr_test文件夹及内部文件有读取权限; - 核对文件名的大小写、拼写是否与实际一致,避免因匹配错误导致加载失败。
- 确保运行程序的用户对
内容的提问来源于stack exchange,提问作者c0nfluks
相关产品推荐
相关产品推荐

