如何在Pandas中捕获DateParseError异常?
解决Pandas中DateParseError异常捕获问题
问题原因
你遇到的DateParseError并不直接属于pd.errors.ParserError的子类,所以直接捕获ParserError无法命中该异常。
正确捕获方式
1. 直接捕获pd.errors.DateParseError
这个异常类实际存在于pd.errors模块下,可直接指定捕获:
import pandas as pd try: pd.to_datetime('yesterday') except pd.errors.DateParseError: print('exception caught')
2. 兜底捕获父类异常(兼容场景)
如果需要覆盖更多日期解析错误,或者担心版本差异导致异常类路径变化,可以捕获ValueError(DateParseError最终继承自该类),但注意会同时捕获其他非日期解析类的ValueError:
import pandas as pd try: pd.to_datetime('yesterday') except ValueError: print('exception caught')
3. 底层模块捕获(不推荐)
DateParseError的底层定义在pandas._libs.tslibs.parsing中,也可以直接导入捕获,但该路径属于内部实现,可能随版本变更:
import pandas as pd from pandas._libs.tslibs.parsing import DateParseError try: pd.to_datetime('yesterday') except DateParseError: print('exception caught')
额外优化建议
如果需要解析yesterday这类相对日期,可以先通过dateutil等工具预处理后再传入pd.to_datetime:
from datetime import datetime from dateutil.relativedelta import relativedelta import pandas as pd def parse_custom_date(date_str): try: return pd.to_datetime(date_str) except pd.errors.DateParseError: lower_str = date_str.lower() if lower_str == 'yesterday': return pd.to_datetime(datetime.now() - relativedelta(days=1)) elif lower_str == 'today': return pd.to_datetime(datetime.now()) # 可扩展更多相对日期逻辑 raise print(parse_custom_date('yesterday'))
内容的提问来源于stack exchange,提问作者kosnik
相关产品推荐
相关产品推荐

