You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:42:06