使用exifread处理非图片文件报错,如何让其忽略这类文件?
解决exifread处理非图片文件时的错误输出问题
核心问题
exifread的process_file方法默认会将格式错误信息打印到控制台,即便你用try-except捕获异常,它的内部打印逻辑仍会执行。另外你判断标签的方式存在问题:tags["EXIF DateTimeOriginal"] == True的写法不符合实际,标签值是日期字符串而非布尔值,且直接用[]访问不存在的键会抛出KeyError。
修正后的代码
import exifread item = r"D:\TEMP\Vesna.mp3" with open(item, 'rb') as file: try: # 设置quiet=True关闭exifread内部的错误打印 tags = exifread.process_file(file, stop_tag="EXIF DateTimeOriginal", quiet=True) # 检查目标标签是否存在 if "EXIF DateTimeOriginal" in tags: taken = tags["EXIF DateTimeOriginal"] print(taken) else: print("无目标标签") except Exception as e: # 捕获其他可能的异常(比如文件读取错误) print(f"处理出错: {str(e)}")
关键修改点
- 添加
quiet=True参数:彻底关闭exifread主动打印格式不识别错误的行为,解决错误信息输出问题。 - 替换标签判断逻辑:用
"EXIF DateTimeOriginal" in tags检查标签存在性,避免直接访问不存在的键抛出异常,逻辑更合理。 - 路径使用原始字符串:
r"D:\TEMP\Vesna.mp3"避免转义字符引发的路径解析问题。 - 明确捕获异常类型:用
except Exception as e代替裸except,便于排查其他潜在问题。
内容的提问来源于stack exchange,提问作者Zwornik
相关产品推荐
相关产品推荐

