使用Python datetime模块strptime方法时报ValueError如何解决?
报错原因
- 核心触发逻辑为
datetime.strptime()方法接收到的待转换内容与指定的%Y-%m-%d日期格式不匹配,报错信息明确显示当前传入的待转换内容是字符串A,完全不符合年-月-日的格式要求。 - 结合代码逻辑排查,最高概率的诱因是遍历对象写错:当前代码循环遍历的是
header_row(表头行),表头第三列的内容就是字段名A,并非实际的业务日期数据,属于误将表头当做数据行遍历的错误。 - 若确认遍历对象是数据行仍触发报错,则说明源数据存在脏数据,存在部分行数据缺失、错位的情况,导致第三列内容不是预期的日期格式。
解决方案
- 修正遍历逻辑,跳过表头行仅遍历实际数据
如果使用csv模块读取文件,需单独读取表头后再遍历后续数据行,示例逻辑如下:
import csv from datetime import datetime dates, highs = [], [] with open('你的数据文件路径.csv', 'r') as f: reader = csv.reader(f) header_row = next(reader) # 单独读取表头,不参与数据处理 for row in reader: # 后续数据处理逻辑
- 新增异常捕获逻辑兼容脏数据
避免单条格式异常的数据导致整个程序终止,同时修正原代码第一行变量名不匹配的问题(原代码写的是date, highs = [], [],后续追加数据用的是dates,会触发NameError),完整修正后的代码如下:
from datetime import datetime import csv dates, highs = [], [] with open('你的数据文件路径.csv', 'r') as f: reader = csv.reader(f) next(reader) # 跳过表头 for row in reader: try: current_date = datetime.strptime(row[2], '%Y-%m-%d') high = int(row[5]) except ValueError: # 格式异常的行直接跳过,也可自行增加日志打印异常行信息便于排查 continue dates.append(current_date) highs.append(high)
内容的提问来源于stack exchange,提问作者AbduRahman
相关产品推荐
相关产品推荐

